Xayrga
wiki
https://xayr.ga/wiki/Main_Page
MediaWiki 1.37.1
first-letter
Media
Special
Talk
User
User talk
Xayrga
Xayrga talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Main Page
0
1
1
2022-03-11T21:37:14Z
MediaWiki default
2
wikitext
text/x-wiki
<strong>MediaWiki has been installed.</strong>
Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide] for information on using the wiki software.
== Getting started ==
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki release mailing list]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]
11cef88175cf81168a86e7c0327a5b2d7a1920f5
2
1
2022-03-12T02:36:30Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Sega Dreamcast]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Nintendo Gamecube / Nintendo Wii]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Nintendo 64]
4d135d124e78033dadbe3dc43219712cebf5f7ff
3
2
2022-03-12T02:36:56Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Sega Dreamcast]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo Gamecube / Nintendo Wii]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo 64]
504a6fdcad6181716120f538ad5b332f36ea23a1
7
3
2022-03-12T02:41:03Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Sega Dreamcast]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo Gamecube + Wii Audio]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo 64]
84014f0202ac413efe0243fc23f6fbf8b1daa041
8
7
2022-03-12T02:41:16Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Sega Dreamcast]
* [https://xayr.ga/research/index.php/Nintendo_Gamecube: Nintendo Gamecube + Wii Audio]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo 64]
ce22adedb064f2d4c206ac2f5ec13b01c5dc9cfe
9
8
2022-03-12T02:41:35Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Sega Dreamcast]
* [https://xayr.ga/research/index.php/Nintendo_Gamecube :Nintendo Gamecube + Wii Audio]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo 64]
84960d2d3524b67ed7e193f5fd6856421976cc23
10
9
2022-03-12T02:41:45Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Sega Dreamcast]
* [https://xayr.ga/research/index.php/Nintendo_Gamecube : Nintendo Gamecube + Wii Audio]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo 64]
e37bd046ef67f89935389619c5d156439719e90e
11
10
2022-03-12T02:41:56Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Sega Dreamcast]
* [https://xayr.ga/research/index.php/Nintendo_Gamecube: Nintendo Gamecube + Wii Audio]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual: Nintendo 64]
ce22adedb064f2d4c206ac2f5ec13b01c5dc9cfe
12
11
2022-03-12T02:45:43Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
<h2>Consoles</h2>
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Sega Dreamcast]
* [https://xayr.ga/research/index.php/Nintendo_Gamecube:Nintendo Gamecube + Wii Audio]
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Nintendo 64]
5fda8eb02f0e9b03ea9a3dd265c1e6f81dabdc02
13
12
2022-03-12T02:49:27Z
Xayr
1
wikitext
text/x-wiki
<strong>Oh, hi</strong>
I'm Xayr.
I break computers. Look at some of my stuff below.
<h1>R/E Projects</h1>
Reverse engineering projects. Lists of various formats for some consoles, usually audio formats.
aaadbeacfa104cbd4d26cc1ae174e306fddf2d6a
Nintendo Gamecube
0
3
6
2022-03-12T02:40:19Z
Xayr
1
Created page with "Yes"
wikitext
text/x-wiki
Yes
5397e0583f14f6c88de06b1ef28f460a1fb5b0ae
Category:JAudio
14
5
15
2022-03-12T02:54:34Z
Xayr
1
Created page with "JAudio is the audio subsystem used on select first-party Nintendo titles on the GameCube and Wii It was delivered in two versions, v1 and v2 with slight variations between both."
wikitext
text/x-wiki
JAudio is the audio subsystem used on select first-party Nintendo titles on the GameCube and Wii
It was delivered in two versions, v1 and v2 with slight variations between both.
0ba7d0c461c2998c0e08f1af809b29b43f2b450e
JAudio1
0
6
16
2022-03-12T02:57:36Z
Xayr
1
Created page with "First"
wikitext
text/x-wiki
First
916a78d701ded328cd66da58a97ef8cd28a99e84
JAudiov1
0
7
17
2022-03-12T03:02:36Z
Xayr
1
Created page with "[[Category:JAudio]] <h1>JAudio V1</h1> JAudio V1 was the first major revision of the audio engine for the gamecube. It's roots are in the game Pikmin"
wikitext
text/x-wiki
[[Category:JAudio]]
<h1>JAudio V1</h1>
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin
c0c2cef436568596a0e81084b91949c6b9341499
18
17
2022-03-12T03:05:47Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
97efd3f513dec3d3b7bcbe1ccf1a4f885c9b99b2
19
18
2022-03-12T03:08:33Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
[[AAF]]
[[AW]]
[[BAS (J3D)]]
[[BARC]]
[[BMS]]
[[HED]]
[[IBNK]]
[[WSYS]]
b4f194fb2b1ec0aafddf00d6961acd8d5619a6e9
20
19
2022-03-12T03:08:48Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
* [[AAF]]
* [[AW]]
* [[BAS (J3D)]]
* [[BARC]]
* [[BMS]]
* [[HED]]
* [[IBNK]]
* [[WSYS]]
c5e711eada9afea967573cf63bdc4e863bcb5f4f
21
20
2022-03-12T03:09:24Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
* [[AAF]]
* [[AW]]
* [[BAS (J3D)]]
* [[BARC]]
* [[BMS]]
* [[BST]]
* [[HED]]
* [[IBNK]]
* [[SFT]]
* [[WSYS]]
9a95306f9bdd4cb0f107a28664f5dcff1790a8e8
22
21
2022-03-12T03:10:10Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
* [[AAF]]
* [[AW]]
* [[AFC]]
* [[BAS (J3D)]]
* [[BARC]]
* [[BMS]]
* [[BST]]
* [[HED]]
* [[IBNK]]
* [[SFT]]
* [[WSYS]]
bd34c40ae35b772837b85e0654badfe8fe36f7d1
46
22
2022-03-12T04:11:16Z
108.162.237.140
0
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
* [[AAF]]
* [[AW]]
* [[AFC]]
* [[ASN]]
* [[BAS (J3D)]]
* [[BARC]]
* [[BMS]]
* [[BST]]
* [[HED]]
* [[IBNK]]
* [[SFT]]
* [[WSYS]]
0e0008bf828dcf049078ff537bf826ad98196c65
AAF
0
8
23
2022-03-12T03:11:44Z
Xayr
1
Created page with "'''AAF''' stores sound effect, wave, instrument, and music data. =AAF Header= The file's headers is composed to several int32's packed in a common format. The first int32 will always read the ID of a section. When you read 0, you stop reading. Header Entry Structure {| class="wikitable" |- ! id !! Structure !! Description |- | <center>0</center> || (none) || Tells to stop reading this section |- | <center>1</center> || (int32 offset, int32 size, int32 t..."
wikitext
text/x-wiki
'''AAF''' stores sound effect, wave, instrument, and music data.
=AAF Header=
The file's headers is composed to several int32's packed in a common format.
The first int32 will always read the ID of a section. When you read 0, you stop reading.
Header Entry Structure
{| class="wikitable"
|-
! id !! Structure !! Description
|-
| <center>0</center> || (none) || Tells to stop reading this section
|-
| <center>1</center> || (int32 offset, int32 size, int32 type) || Pointer to the BST (Binary Sound Table)
|-
| <center>2</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || IBNK Pointer Table
|-
| <center>3</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || WSYS Pointer Table
|-
| <center>4</center> || (int32 offset, int32 size, int32 type) || Pointer to BSC (Binary Sequence Collection)
|-
| <center>5</center> || (int32 offset, int32 size, int32 type) || Pointer to the BSM (Binary Stream Map)
|}
=== Sample Parsing Code ===
<nowiki>while (true)
{
var ChunkID = aafRead.ReadUInt32();
switch (ChunkID)
{
case 0:
return;
case 1:
case 5:
case 4:
case 6:
case 7:
{
offset = aafRead.ReadUInt32();
size = aafRead.ReadUInt32();
type = aafRead.ReadUInt32();
break;
}
case 2: // INST
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
}
break;
case 3: // WSYS
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
break;
}
}
}</nowiki>
=IBNK=
IBNK Stands for "Instrument Bank". It holds the parameters required to play one of the sounds out of the WSYS as a melodic instrument. They can also contain sound effects.
All pointers are relative to the 0th byte of the IBNK
==Header==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x49424e4b 'IBNK' || Magic
|-
| <center>0x04</center> || int32 || Size || Size of the IBNK
|-
| <center>0x08</center> || int32 || ID || Global IBNK ID
|-
| <center>0x0C</center> || int32 || Flags || Flags
|-
| <center>0x10</center> || byte[0x14] || Padding || Padding
|-
| <center>0x24</center> || int32 || 0x42414E4B 'BANK' || Magic
|-
| <center>0x28</center> || int32*[0xF0] || Instrument Pointers || Pointers to instrument objects (0 = empty slot)
|-
|}
==INST==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x494E5354 'INST' || Magic
|-
| <center>0x04</center> || int32 || 0 || Zero (Padding)
|-
| <center>0x08</center> || float || frequencyMultiplier || Frequency Multiplier
|-
| <center>0x0C</center> || float || gainMultiplier || gainMultiplier
|-
| <center>0x10</center> || int32* || Osc1* || Pointer to first [[AAF#JOscillator|JOscillator]] (0 = null)
|-
| <center>0x14</center> || int32* || Osc2* || Pointer to second [[AAF#JOscillator|JOscillator]](0 = null)
|-
| <center>0x18</center> || int32* || Eff1* || Pointer to first Effect (0 = null)
|-
| <center>0x1C</center> || int32* || Eff2* || Pointer to second Effect (0 = null)
|-
| <center>0x20</center> || int32* || Sen1* || Pointer to first sensor (0 = null)
|-
| <center>0x24</center> || int32* || Sen2* || Pointer to second swnsor (0 = null)
|-
| <center>0x28</center> || int32 || keyRegionCount || Count of key regions
|-
| <center>0x2C</center> || [[AAF#InstrumentKeyRegion|InstrumentKeyRegion]]*[keyRegionCount] || Key Regions || int32 pointers to key regions
|-
|}
===InstrumentKeyRegion===
Container for an instruments keys. Usually there's only one.
The "root key" item defines the key this specific key object is assigned to. By default, it starts at 0. The next definition fills all the keys in betwen, meaning if the next root key was 127, the keys at 0-127 would be assigned to that region.
A single key has two parts to it. The note, and the velocity. The note is specified by the key region, and the velocity regions are defined by attaching them to key regions.
Velocity regions, being the final part of the sound, handle the finetuning, and wave selection.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || bKey || base Key
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || int32 || velocityRegionCount || Count of velocity regions
|-
| <center>0x08</center> || [[AAF#InstrumentVeloRegion|InstrumentVeloRegion]]*[velocityRegionCount] || velregptr || Int32 pointers to each velocity region.
|-
|}
====InstrumentVeloRegion====
The velocity region of a KeyRegion. The "root velocity" operates identically to the Key Region.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || bKey || root velocity
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || short || wsysID || WSYS that the sound for this instrument is in.
|-
| <center>0x06</center> || short || waveID || WaveID in the WSYS that the sound for this instrument is in.
|-
| <center>0x08</center> || float || gainMultFT || Finetune float for gain / volume
|-
| <center>0x0C</center> || float || freqMultFT || Finetune float for pitch / frequency
|-
|}
==PER2==
A type of INST that doesn't have a pitch or gain on the main instrument, or as many features (like oscillators)
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x50455232 'PER2' || Magic
|-
| <center>0x04</center> || byte[0x84] || 0 || Unused
|-
| <center>0x8C</center> || [[AAF#PercussionKey|PercussionKey]]*[100] || 100 percussion entries || Int32 pointers to percussion keys
|-
|}
===PercussionKey===
Key type for PER2's instrument data (Not regioned)
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || float || pitch || Finetune Pitch
|-
| <center>0x04</center> || float || volume || Finetune Gain
|-
| <center>0x08</center> || byte[8] || unused || unused
|-
| <center>0x10</center> || int32 || velocityRegionCount || Count of velocity regions
|-
| <center>0x14</center> || [[AAF#InstrumentVeloRegion|InstrumentVeloRegion]]*[velocityRegionCount] || velregptr || Int32 Pointers to each velocity region.
|-
|}
==JOscillator==
JAITOscillator is an internal name. It stands for JAudioInterface:TOscillator.
They have no header data, and no other identifying data. , they are pointed to directly by INST objects.
The width and vertex operators are used mainly for effects like vibrato.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || [[AAF#JOscillatorMode|JOscillatorMode]] || Mode / Target
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || float || rate || rate
|-
| <center>0x08</center> || int32* || attackEnvOffset || Int32 pointer to attack [[AAF#JEnvelope|JEnvelope]]
|-
| <center>0x0C</center> || int32* || releaseEnvOffset || Int32 pointer to release [[AAF#JEnvelope|JEnvelope]]
|-
| <center>0x10</center> || float || width || Width of the oscillator
|-
| <center>0x14</center> || float || vertex || Vertex of the oscillator
|-
|}
===JOscillatorMode===
Different modes that the JOscillator can target.
{| class="wikitable"
|-
! mode !! Name !! Desc
|-
| <center>0x01</center> || Volume || Changes volume of instrument
|-
| <center>0x02</center> || Pitch || Changes pitch of instrument
|-
| <center>0x03</center> || Pan || Changes pan of instrument
|-
| <center>0x04</center> || FX || Changes filter
|-
| <center>0x05</center> || Dolby || (Unused) for digital sound output / dolby surround
|-
|}
===JEnvelope===
JEnvelopes are only referenced by a [[AAF#JOscillator|JOscillator]].
Similar to their parent, they have no identifying header data. In addition, they have no static length. They are ended by an end marker (Which in practice, will require a double scan)
A JEnvelope is composed of vectors with modes with a structure as follows:
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || short || [[AAF#JEnvelopeMode|JEnvelopeMode]] || Mode selection for this vector
|-
| <center>0x02</center> || short || time || Time that this takes place (In ticks)
|-
| <center>0x06</center> || short || value || Value of this vector at this time
|-
| <center>0x10</center> || int32 || velocityRegionCount || Count of velocity regions
|-
|}
====JEnvelopeMode====
{| class="wikitable"
|-
! mode !! Name !! Desc
|-
| <center>0x00</center> || Linear || Linear approach to the next vector value
|-
| <center>0x01</center> || Square || Square curve approach to the next vector value
|-
| <center>0x02</center> || Square || Square Root (n^0.5) curve approach to the next vector value
|-
| <center>0x03</center> || SampleCell || Unknown, (Unused?)
|-
| <center>0x0D</center> || Loop || Command vector, defines a loop point
|-
| <center>0x0E</center> || Hold || Pauses the envelope, usually used after it completes
|-
| <center>0x0F</center> || Stop || Stops both the instrument and the envelope
|-
|}
=WSYS=
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[AAF#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[AAF#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[AAF#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
4931cf4c6e6d265bdbb4182c14fa8cf50783e8cd
24
23
2022-03-12T03:12:47Z
Xayr
1
wikitext
text/x-wiki
'''AAF''' stores sound effect, wave, instrument, and music data.
=AAF Header=
The file's headers is composed to several int32's packed in a common format.
The first int32 will always read the ID of a section. When you read 0, you stop reading.
Header Entry Structure
{| class="wikitable"
|-
! id !! Structure !! Description
|-
| <center>0</center> || (none) || Tells to stop reading this section
|-
| <center>1</center> || (int32 offset, int32 size, int32 type) || Pointer to the BST (Binary Sound Table)
|-
| <center>2</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || IBNK Pointer Table
|-
| <center>3</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || WSYS Pointer Table
|-
| <center>4</center> || (int32 offset, int32 size, int32 type) || Pointer to BSC (Binary Sequence Collection)
|-
| <center>5</center> || (int32 offset, int32 size, int32 type) || Pointer to the BSM (Binary Stream Map)
|}
=== Sample Parsing Code ===
<nowiki>while (true)
{
var ChunkID = aafRead.ReadUInt32();
switch (ChunkID)
{
case 0:
return;
case 1:
case 5:
case 4:
case 6:
case 7:
{
offset = aafRead.ReadUInt32();
size = aafRead.ReadUInt32();
type = aafRead.ReadUInt32();
break;
}
case 2: // INST
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
}
break;
case 3: // WSYS
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
break;
}
}
}</nowiki>
=IBNK=
IBNK Stands for "Instrument Bank". It holds the parameters required to play one of the sounds out of the WSYS as a melodic instrument. They can also contain sound effects.
All pointers are relative to the 0th byte of the IBNK
==Header==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x49424e4b 'IBNK' || Magic
|-
| <center>0x04</center> || int32 || Size || Size of the IBNK
|-
| <center>0x08</center> || int32 || ID || Global IBNK ID
|-
| <center>0x0C</center> || int32 || Flags || Flags
|-
| <center>0x10</center> || byte[0x14] || Padding || Padding
|-
| <center>0x24</center> || int32 || 0x42414E4B 'BANK' || Magic
|-
| <center>0x28</center> || int32*[0xF0] || Instrument Pointers || Pointers to instrument objects (0 = empty slot)
|-
|}
==INST==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x494E5354 'INST' || Magic
|-
| <center>0x04</center> || int32 || 0 || Zero (Padding)
|-
| <center>0x08</center> || float || frequencyMultiplier || Frequency Multiplier
|-
| <center>0x0C</center> || float || gainMultiplier || gainMultiplier
|-
| <center>0x10</center> || int32* || Osc1* || Pointer to first [[AAF#JOscillator|JOscillator]] (0 = null)
|-
| <center>0x14</center> || int32* || Osc2* || Pointer to second [[AAF#JOscillator|JOscillator]](0 = null)
|-
| <center>0x18</center> || int32* || Eff1* || Pointer to first Effect (0 = null)
|-
| <center>0x1C</center> || int32* || Eff2* || Pointer to second Effect (0 = null)
|-
| <center>0x20</center> || int32* || Sen1* || Pointer to first sensor (0 = null)
|-
| <center>0x24</center> || int32* || Sen2* || Pointer to second swnsor (0 = null)
|-
| <center>0x28</center> || int32 || keyRegionCount || Count of key regions
|-
| <center>0x2C</center> || [[AAF#InstrumentKeyRegion|InstrumentKeyRegion]]*[keyRegionCount] || Key Regions || int32 pointers to key regions
|-
|}
===InstrumentKeyRegion===
Container for an instruments keys. Usually there's only one.
The "root key" item defines the key this specific key object is assigned to. By default, it starts at 0. The next definition fills all the keys in betwen, meaning if the next root key was 127, the keys at 0-127 would be assigned to that region.
A single key has two parts to it. The note, and the velocity. The note is specified by the key region, and the velocity regions are defined by attaching them to key regions.
Velocity regions, being the final part of the sound, handle the finetuning, and wave selection.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || bKey || base Key
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || int32 || velocityRegionCount || Count of velocity regions
|-
| <center>0x08</center> || [[AAF#InstrumentVeloRegion|InstrumentVeloRegion]]*[velocityRegionCount] || velregptr || Int32 pointers to each velocity region.
|-
|}
====InstrumentVeloRegion====
The velocity region of a KeyRegion. The "root velocity" operates identically to the Key Region.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || bKey || root velocity
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || short || wsysID || WSYS that the sound for this instrument is in.
|-
| <center>0x06</center> || short || waveID || WaveID in the WSYS that the sound for this instrument is in.
|-
| <center>0x08</center> || float || gainMultFT || Finetune float for gain / volume
|-
| <center>0x0C</center> || float || freqMultFT || Finetune float for pitch / frequency
|-
|}
==PER2==
A type of INST that doesn't have a pitch or gain on the main instrument, or as many features (like oscillators)
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x50455232 'PER2' || Magic
|-
| <center>0x04</center> || byte[0x84] || 0 || Unused
|-
| <center>0x8C</center> || [[AAF#PercussionKey|PercussionKey]]*[100] || 100 percussion entries || Int32 pointers to percussion keys
|-
|}
===PercussionKey===
Key type for PER2's instrument data (Not regioned)
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || float || pitch || Finetune Pitch
|-
| <center>0x04</center> || float || volume || Finetune Gain
|-
| <center>0x08</center> || byte[8] || unused || unused
|-
| <center>0x10</center> || int32 || velocityRegionCount || Count of velocity regions
|-
| <center>0x14</center> || [[AAF#InstrumentVeloRegion|InstrumentVeloRegion]]*[velocityRegionCount] || velregptr || Int32 Pointers to each velocity region.
|-
|}
==JOscillator==
JAITOscillator is an internal name. It stands for JAudioInterface:TOscillator.
They have no header data, and no other identifying data. , they are pointed to directly by INST objects.
The width and vertex operators are used mainly for effects like vibrato.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || [[AAF#JOscillatorMode|JOscillatorMode]] || Mode / Target
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || float || rate || rate
|-
| <center>0x08</center> || int32* || attackEnvOffset || Int32 pointer to attack [[AAF#JEnvelope|JEnvelope]]
|-
| <center>0x0C</center> || int32* || releaseEnvOffset || Int32 pointer to release [[AAF#JEnvelope|JEnvelope]]
|-
| <center>0x10</center> || float || width || Width of the oscillator
|-
| <center>0x14</center> || float || vertex || Vertex of the oscillator
|-
|}
===JOscillatorMode===
Different modes that the JOscillator can target.
{| class="wikitable"
|-
! mode !! Name !! Desc
|-
| <center>0x01</center> || Volume || Changes volume of instrument
|-
| <center>0x02</center> || Pitch || Changes pitch of instrument
|-
| <center>0x03</center> || Pan || Changes pan of instrument
|-
| <center>0x04</center> || FX || Changes filter
|-
| <center>0x05</center> || Dolby || (Unused) for digital sound output / dolby surround
|-
|}
===JEnvelope===
JEnvelopes are only referenced by a [[AAF#JOscillator|JOscillator]].
Similar to their parent, they have no identifying header data. In addition, they have no static length. They are ended by an end marker (Which in practice, will require a double scan)
A JEnvelope is composed of vectors with modes with a structure as follows:
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || short || [[AAF#JEnvelopeMode|JEnvelopeMode]] || Mode selection for this vector
|-
| <center>0x02</center> || short || time || Time that this takes place (In ticks)
|-
| <center>0x06</center> || short || value || Value of this vector at this time
|-
| <center>0x10</center> || int32 || velocityRegionCount || Count of velocity regions
|-
|}
====JEnvelopeMode====
{| class="wikitable"
|-
! mode !! Name !! Desc
|-
| <center>0x00</center> || Linear || Linear approach to the next vector value
|-
| <center>0x01</center> || Square || Square curve approach to the next vector value
|-
| <center>0x02</center> || Square || Square Root (n^0.5) curve approach to the next vector value
|-
| <center>0x03</center> || SampleCell || Unknown, (Unused?)
|-
| <center>0x0D</center> || Loop || Command vector, defines a loop point
|-
| <center>0x0E</center> || Hold || Pauses the envelope, usually used after it completes
|-
| <center>0x0F</center> || Stop || Stops both the instrument and the envelope
|-
|}
c1f078d47036ac77085d4f12fcab7a261d2023fa
44
24
2022-03-12T04:04:40Z
Xayr
1
wikitext
text/x-wiki
'''AAF''' stores sound effect, wave, instrument, and music data.
=AAF Header=
The file's headers is composed to several int32's packed in a common format.
The first int32 will always read the ID of a section. When you read 0, you stop reading.
Header Entry Structure
{| class="wikitable"
|-
! id !! Structure !! Description
|-
| <center>0</center> || (none) || Tells to stop reading this section
|-
| <center>1</center> || (int32 offset, int32 size, int32 type) || Pointer to the BST (Binary Sound Table)
|-
| <center>2</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || IBNK Pointer Table
|-
| <center>3</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || WSYS Pointer Table
|-
| <center>4</center> || (int32 offset, int32 size, int32 type) || Pointer to BSC (Binary Sequence Collection)
|-
| <center>5</center> || (int32 offset, int32 size, int32 type) || Pointer to the BSM (Binary Stream Map)
|}
=== Sample Parsing Code ===
<nowiki>while (true)
{
var ChunkID = aafRead.ReadUInt32();
switch (ChunkID)
{
case 0:
return;
case 1:
case 5:
case 4:
case 6:
case 7:
{
offset = aafRead.ReadUInt32();
size = aafRead.ReadUInt32();
type = aafRead.ReadUInt32();
break;
}
case 2: // INST
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
}
break;
case 3: // WSYS
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
break;
}
}
}</nowiki>
ceb5a1b4364b81b970df0b20e0e64b30649b6df2
WSYS
0
9
25
2022-03-12T03:13:07Z
Xayr
1
Created page with "=WSYS= Internally, Wave System. This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio. {| class="wikitable" |- ! Offset !! Type !! Name !! Description |- | <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic |- | <center>0x04</center> || int32 || size || WSYS Size |- | <center>0x08</center> || int32 || wsysID || WSYS ID..."
wikitext
text/x-wiki
=WSYS=
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[AAF#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[AAF#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[AAF#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
89183bc848b781e36b9ccee8183ea67eec4661a8
26
25
2022-03-12T03:13:21Z
Xayr
1
wikitext
text/x-wiki
'''WSYS'''
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[AAF#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[AAF#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[AAF#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
5e2444b62564e48209e770a6e6a037b402e8aad9
27
26
2022-03-12T03:14:32Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[AAF#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[AAF#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[AAF#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
4169eb43faf3701604e379df461c9f61ecd55a41
28
27
2022-03-12T03:16:54Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[AAF#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[AAF#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[AAF#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
71ff8c9ee05ce88d12711686e34385ddf814580d
29
28
2022-03-12T03:17:28Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[AAF#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[AAF#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[AAF#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
64da2ddf2376b21e55055c2332c706096736ab6a
30
29
2022-03-12T03:18:45Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF || WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF || WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
b0261f49cdbc95a72f24b075db0dddbc06afcd3f
31
30
2022-03-12T03:19:19Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]]
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]]
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
93a030e1d82c7f5f0c6f85058f727909904dfb43
32
31
2022-03-12T03:19:45Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || Flags
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
ea589a5e8e6f0e70117991fc2ea7f65dac28cd08
33
32
2022-03-12T03:20:06Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || flags || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
e98f322143e779a58a3dbca5a8e63ed7c205bb1f
34
33
2022-03-12T03:20:19Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE || SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
b74b999b5f96ae73ee3cb0620371d5b2d63923af
35
34
2022-03-12T03:20:40Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'INF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
91d24b783910111eee7428b63c3b5e09207d53ee
36
35
2022-03-12T03:24:53Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
30037c280a20180b259195b4f27677886fc2686d
37
36
2022-03-12T03:41:04Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==WAVE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
ea00b28db6f0fe6f8670bf5e3efe60119c8d06ce
38
37
2022-03-12T03:43:18Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==WAVE==
Container format for Wave Information. This tells you where the ADPCM / PCM / whatever data starts inside of the .AW file for the current group and for what wave.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
9cbe29d9fad6762c57a3b81d68829665933ebbff
40
38
2022-03-12T03:47:00Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
Great part about WSYS is it doesn't matter what version of JAudio you're running. The WSYS format never changed between engine versions (minus the wave count int, but that doesn't matter because older versions just ignore it!)
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==WAVE==
Container format for Wave Information. This tells you where the ADPCM / PCM / whatever data starts inside of the .AW file for the current group and for what wave.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
f70f38c303fbae9868609795d83234e41a57794c
41
40
2022-03-12T03:53:40Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
Great part about WSYS is it doesn't matter what version of JAudio you're running. The WSYS format never changed between engine versions (minus the wave count int, but that doesn't matter because older versions just ignore it!)
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==WaveGroup==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x70] || archiveName || File Path for .AW
|-
| <center>0x04</center> || int32|| wavesCount || Wave Count
|-
| <center>0x08</center> || int32 || [[WSYS#WAVE|WAVE]]*[] || Pointer array of Waves
|-
|}
==WAVE==
Container format for Wave Information. This tells you where the ADPCM / PCM / whatever data starts inside of the .AW file for the current group and for what wave.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
f6db26d0e0c52fb55db9ec48d6556474c7585b65
42
41
2022-03-12T04:01:12Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
Great part about WSYS is it doesn't matter what version of JAudio you're running. The WSYS format never changed between engine versions (minus the wave count int, but that doesn't matter because older versions just ignore it!)
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==C-DF==
C-DF , we don't know what it stands for, but we know that it assigns ID's to each of the waves in the scenes.
Note: The other sections C-ST, and C-EX point to to this category as well. They remain empty. Code for parsing them isn't even in the executables.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x432D4446 ('C-DF') || Magic
|-
| <center>0x04</center> || int32 || wavesCount || Wave Count
|-
| <center>0x08</center> || int32 || [[WSYS#WAVEID|WAVEID]]*[] || Pointer array waveID's
|-
|}
==C-DF==
Contains wave ID info
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x432D4446 ('C-DF') || Magic
|-
| <center>0x04</center> || int32 || wavesCount || Wave Count
|-
| <center>0x08</center> || int32 || [[WSYS#WAVEID|WAVEID]]*[] || Pointer array waveID's
|-
|}
==WAVEID==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int16 || waveGroupID || Wave Group ID (Current WSYS)
|-
| <center>0x02</center> || int16 || waveID || The ID assigned from this wave
|-
|}
==WaveGroup==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x70] || archiveName || File Path for .AW
|-
| <center>0x70</center> || int32|| wavesCount || Wave Count
|-
| <center>0x74</center> || int32 || [[WSYS#WAVE|WAVE]]*[] || Pointer array of Waves
|-
|}
==WAVE==
Container format for Wave Information. This tells you where the ADPCM / PCM / whatever data starts inside of the .AW file for the current group and for what wave.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
77f808069c9dc2a5ce1cd08a7b80e990d17b879d
43
42
2022-03-12T04:01:56Z
Xayr
1
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
Great part about WSYS is it doesn't matter what version of JAudio you're running. The WSYS format never changed between engine versions (minus the wave count int, but that doesn't matter because older versions just ignore it!)
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==C-DF==
C-DF , we don't know what it stands for, but we know that it assigns ID's to each of the waves in the scenes.
Note: The other sections C-ST, and C-EX point to to this category as well. They remain empty. Code for parsing them isn't even in the executables.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x432D4446 ('C-DF') || Magic
|-
| <center>0x04</center> || int32 || wavesCount || Wave Count
|-
| <center>0x08</center> || int32 || [[WSYS#WAVEID|WAVEID]]*[] || Pointer array waveID's
|-
|}
==WAVEID==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int16 || waveGroupID || Wave Group ID (Current WSYS)
|-
| <center>0x02</center> || int16 || waveID || The ID assigned from this wave
|-
|}
==WaveGroup==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x70] || archiveName || File Path for .AW
|-
| <center>0x70</center> || int32|| wavesCount || Wave Count
|-
| <center>0x74</center> || int32 || [[WSYS#WAVE|WAVE]]*[] || Pointer array of Waves
|-
|}
==WAVE==
Container format for Wave Information. This tells you where the ADPCM / PCM / whatever data starts inside of the .AW file for the current group and for what wave.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
fdb86a7dc3d95cc3a578670854c96cea8a6a6f74
49
43
2022-03-12T04:24:26Z
108.162.237.16
0
wikitext
text/x-wiki
'''WSYS''' Wave System
Internally, Wave System.
This section contains all of the information required for decoding the [[AW|AW File]] as well as other information for melodic tuning, root key, and other various parts of JAudio.
Great part about WSYS is it doesn't matter what version of JAudio you're running. The WSYS format never changed between engine versions (minus the wave count int, but that doesn't matter because older versions just ignore it!)
__TOC__
<h1>WSYS Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57535953 'WSYS' || Magic
|-
| <center>0x04</center> || int32 || size || WSYS Size
|-
| <center>0x08</center> || int32 || wsysID || WSYS ID (This is how insts select the wsys)
|-
| <center>0x0C</center> || int32 || waveCount || WSYS Wave Count
|-
| <center>0x10</center> || int32 || [[AAF#WINF | WINF Pointer]] || WBINF
|-
| <center>0x14</center> || int32 || [[AAF#WINF | WBCT Pointer]] || WBCT
|-
|}
==WINF==
WINF is a pointer container. They point to the [[WSYS#WaveGroup|Wave Groups]].
The ID's for every wave group are controlled by the [[WSYS#SCNE|SCNE]] object. They line up, WaveGroup[1] uses WaveScenes[1]
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x57494E46 'WINF' || Magic
|-
| <center>0x04</center> || int32 || waveGroupCount || Count of wavegroups
|-
| <center>0x08</center> || [[WSYS#WaveGroup|WaveGroup]]*[] (int32) || waveGroupPointers || Pointers to the individual wavegroups.
|-
|}
==SCNE==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x53434E45 'SCNE' || Magic
|-
| <center>0x04</center> || int64 || padding || padding
|-
| <center>0x0C</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-DF
|-
| <center>0x10</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-EX
|-
| <center>0x14</center> || int32 || [[WSYS#C-DF|C-DF]]* || Pointer to C-ST
|-
|}
==C-DF==
C-DF , we don't know what it stands for, but we know that it assigns ID's to each of the waves in the scenes.
Note: The other sections C-ST, and C-EX point to to this category as well. They remain empty. Code for parsing them isn't even in the executables.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x432D4446 ('C-DF') || Magic
|-
| <center>0x04</center> || int32 || wavesCount || Wave Count
|-
| <center>0x08</center> || int32 || [[WSYS#WAVEID|WAVEID]]*[] || Pointer array waveID's
|-
|}
==WAVEID==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int16 || waveGroupID || Wave Group ID (Current WSYS)
|-
| <center>0x02</center> || int16 || waveID || The ID assigned from this wave
|-
|}
==WaveGroup==
SCNE is a pointer container as well. They point to the [[WSYS#C-DF|C-DF]] objects.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x70] || archiveName || File Path for .AW
|-
| <center>0x70</center> || int32|| wavesCount || Wave Count
|-
| <center>0x74</center> || int32 || [[WSYS#WAVE|WAVE]]*[] || Pointer array of Waves
|-
|}
==WAVE==
Container format for Wave Information. This tells you where the ADPCM / PCM / whatever data starts inside of the .AW file for the current group and for what wave.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || 0x00 || unknown
|-
| <center>0x01</center> || byte || format || WaveFormat
|-
| <center>0x02</center> || byte || baseKey || Base Key
|-
| <center>0x03</center> || byte || 0x00 || unknown
|-
| <center>0x04</center> || float || sampleRate || Sample Rate
|-
| <center>0x08</center> || int32 || awOfsStart || AW Offset Start
|-
| <center>0x0C</center> || int32 || awOfsEnd || AW Length
|-
| <center>0x10</center> || int32(bool) || loop || Loop flags?
|-
| <center>0x14</center> || int32 || loopStartSample || Loop Start Sample
|-
| <center>0x18</center> || int32 || loopEndSample || Loop End Sample
|-
| <center>0x20</center> || int32 || sampleCount || Samples Count
|-
| <center>0x24</center> || short || pLast || ADPCM Loop Last Sample
|-
| <center>0x26</center> || short || pPenult || ADPCM Loop Penult Sample
|-
|}
05e196b7da621c960569e94ed6a0ca5fa67f201f
AW
0
10
39
2022-03-12T03:44:32Z
Xayr
1
Created page with "The .AW file is a raw cluster of mostly unpadded ADPCM4 data. This file is completely useless by itself, to parse it, you need a [[WSYS]]"
wikitext
text/x-wiki
The .AW file is a raw cluster of mostly unpadded ADPCM4 data.
This file is completely useless by itself, to parse it, you need a [[WSYS]]
1ca45f3ca8ce001c8ed81c45c56502b58943acf5
IBNK
0
11
45
2022-03-12T04:04:59Z
Xayr
1
Created page with " IBNK Stands for "Instrument Bank". It holds the parameters required to play one of the sounds out of the WSYS as a melodic instrument. They can also contain sound effects. All pointers are relative to the 0th byte of the IBNK ==Header== {| class="wikitable" |- ! Offset !! Type !! Name !! Description |- | <center>0x00</center> || int32 || 0x49424e4b 'IBNK' || Magic |- | <center>0x04</center> || int32 || Size || Size of the IBNK |- | <center>0x08</cent..."
wikitext
text/x-wiki
IBNK Stands for "Instrument Bank". It holds the parameters required to play one of the sounds out of the WSYS as a melodic instrument. They can also contain sound effects.
All pointers are relative to the 0th byte of the IBNK
==Header==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x49424e4b 'IBNK' || Magic
|-
| <center>0x04</center> || int32 || Size || Size of the IBNK
|-
| <center>0x08</center> || int32 || ID || Global IBNK ID
|-
| <center>0x0C</center> || int32 || Flags || Flags
|-
| <center>0x10</center> || byte[0x14] || Padding || Padding
|-
| <center>0x24</center> || int32 || 0x42414E4B 'BANK' || Magic
|-
| <center>0x28</center> || int32*[0xF0] || Instrument Pointers || Pointers to instrument objects (0 = empty slot)
|-
|}
==INST==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x494E5354 'INST' || Magic
|-
| <center>0x04</center> || int32 || 0 || Zero (Padding)
|-
| <center>0x08</center> || float || frequencyMultiplier || Frequency Multiplier
|-
| <center>0x0C</center> || float || gainMultiplier || gainMultiplier
|-
| <center>0x10</center> || int32* || Osc1* || Pointer to first [[AAF#JOscillator|JOscillator]] (0 = null)
|-
| <center>0x14</center> || int32* || Osc2* || Pointer to second [[AAF#JOscillator|JOscillator]](0 = null)
|-
| <center>0x18</center> || int32* || Eff1* || Pointer to first Effect (0 = null)
|-
| <center>0x1C</center> || int32* || Eff2* || Pointer to second Effect (0 = null)
|-
| <center>0x20</center> || int32* || Sen1* || Pointer to first sensor (0 = null)
|-
| <center>0x24</center> || int32* || Sen2* || Pointer to second swnsor (0 = null)
|-
| <center>0x28</center> || int32 || keyRegionCount || Count of key regions
|-
| <center>0x2C</center> || [[AAF#InstrumentKeyRegion|InstrumentKeyRegion]]*[keyRegionCount] || Key Regions || int32 pointers to key regions
|-
|}
===InstrumentKeyRegion===
Container for an instruments keys. Usually there's only one.
The "root key" item defines the key this specific key object is assigned to. By default, it starts at 0. The next definition fills all the keys in betwen, meaning if the next root key was 127, the keys at 0-127 would be assigned to that region.
A single key has two parts to it. The note, and the velocity. The note is specified by the key region, and the velocity regions are defined by attaching them to key regions.
Velocity regions, being the final part of the sound, handle the finetuning, and wave selection.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || bKey || base Key
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || int32 || velocityRegionCount || Count of velocity regions
|-
| <center>0x08</center> || [[AAF#InstrumentVeloRegion|InstrumentVeloRegion]]*[velocityRegionCount] || velregptr || Int32 pointers to each velocity region.
|-
|}
====InstrumentVeloRegion====
The velocity region of a KeyRegion. The "root velocity" operates identically to the Key Region.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || bKey || root velocity
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || short || wsysID || WSYS that the sound for this instrument is in.
|-
| <center>0x06</center> || short || waveID || WaveID in the WSYS that the sound for this instrument is in.
|-
| <center>0x08</center> || float || gainMultFT || Finetune float for gain / volume
|-
| <center>0x0C</center> || float || freqMultFT || Finetune float for pitch / frequency
|-
|}
==PER2==
A type of INST that doesn't have a pitch or gain on the main instrument, or as many features (like oscillators)
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || 0x50455232 'PER2' || Magic
|-
| <center>0x04</center> || byte[0x84] || 0 || Unused
|-
| <center>0x8C</center> || [[AAF#PercussionKey|PercussionKey]]*[100] || 100 percussion entries || Int32 pointers to percussion keys
|-
|}
===PercussionKey===
Key type for PER2's instrument data (Not regioned)
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || float || pitch || Finetune Pitch
|-
| <center>0x04</center> || float || volume || Finetune Gain
|-
| <center>0x08</center> || byte[8] || unused || unused
|-
| <center>0x10</center> || int32 || velocityRegionCount || Count of velocity regions
|-
| <center>0x14</center> || [[AAF#InstrumentVeloRegion|InstrumentVeloRegion]]*[velocityRegionCount] || velregptr || Int32 Pointers to each velocity region.
|-
|}
==JOscillator==
JAITOscillator is an internal name. It stands for JAudioInterface:TOscillator.
They have no header data, and no other identifying data. , they are pointed to directly by INST objects.
The width and vertex operators are used mainly for effects like vibrato.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || [[AAF#JOscillatorMode|JOscillatorMode]] || Mode / Target
|-
| <center>0x01</center> || byte[3] || padding || padding
|-
| <center>0x04</center> || float || rate || rate
|-
| <center>0x08</center> || int32* || attackEnvOffset || Int32 pointer to attack [[AAF#JEnvelope|JEnvelope]]
|-
| <center>0x0C</center> || int32* || releaseEnvOffset || Int32 pointer to release [[AAF#JEnvelope|JEnvelope]]
|-
| <center>0x10</center> || float || width || Width of the oscillator
|-
| <center>0x14</center> || float || vertex || Vertex of the oscillator
|-
|}
===JOscillatorMode===
Different modes that the JOscillator can target.
{| class="wikitable"
|-
! mode !! Name !! Desc
|-
| <center>0x01</center> || Volume || Changes volume of instrument
|-
| <center>0x02</center> || Pitch || Changes pitch of instrument
|-
| <center>0x03</center> || Pan || Changes pan of instrument
|-
| <center>0x04</center> || FX || Changes filter
|-
| <center>0x05</center> || Dolby || (Unused) for digital sound output / dolby surround
|-
|}
===JEnvelope===
JEnvelopes are only referenced by a [[AAF#JOscillator|JOscillator]].
Similar to their parent, they have no identifying header data. In addition, they have no static length. They are ended by an end marker (Which in practice, will require a double scan)
A JEnvelope is composed of vectors with modes with a structure as follows:
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || short || [[AAF#JEnvelopeMode|JEnvelopeMode]] || Mode selection for this vector
|-
| <center>0x02</center> || short || time || Time that this takes place (In ticks)
|-
| <center>0x06</center> || short || value || Value of this vector at this time
|-
| <center>0x10</center> || int32 || velocityRegionCount || Count of velocity regions
|-
|}
====JEnvelopeMode====
{| class="wikitable"
|-
! mode !! Name !! Desc
|-
| <center>0x00</center> || Linear || Linear approach to the next vector value
|-
| <center>0x01</center> || Square || Square curve approach to the next vector value
|-
| <center>0x02</center> || Square || Square Root (n^0.5) curve approach to the next vector value
|-
| <center>0x03</center> || SampleCell || Unknown, (Unused?)
|-
| <center>0x0D</center> || Loop || Command vector, defines a loop point
|-
| <center>0x0E</center> || Hold || Pauses the envelope, usually used after it completes
|-
| <center>0x0F</center> || Stop || Stops both the instrument and the envelope
|-
|}
29dcd53cce8a148c23184c013a414b3dcd250f1b
ASN
0
12
47
2022-03-12T04:16:30Z
108.162.237.4
0
Created page with " __TOC__ {| class="wikitable" |- ! Offset !! Type !! Name !! Description |- | <center>0x00</center> || byte[0x0E] || 0 || Zero padding |- | <center>0x0E</center> || short || soundCount || Count of sounds |- | <center>0x10</center> || [[ASN#Category|WaveGroup]][0x12] || Categories || Category array with hardcoded arbitrary length |- |}"
wikitext
text/x-wiki
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte[0x0E] || 0 || Zero padding
|-
| <center>0x0E</center> || short || soundCount || Count of sounds
|-
| <center>0x10</center> || [[ASN#Category|WaveGroup]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
cb85a2f9f036b281846f0ca2978b8c5847e81b56
48
47
2022-03-12T04:21:03Z
108.162.237.140
0
wikitext
text/x-wiki
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte[0x0E] || 0 || Zero padding
|-
| <center>0x0E</center> || short || soundCount || Count of sounds
|-
| <center>0x10</center> || [[ASN#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1c</center> || short || categoryID || Count of sounds
|-
| <center>0x20</center> || short || Category Index || Category Index
|-
|}
68e2bece6b00fec29c231cfce8542d478e3d1a88
SFT
0
13
50
2022-03-12T21:09:58Z
Xayr
1
Created page with " __TOC__ <h1>SFT Structure</h1> {| class="wikitable" |- ! Offset !! Type !! Name !! Description |- | <center>0x00</center> || int32 || count || Entry Count |- | <center>0x04</center> || byte[0xC] || padding || padding |- | <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries |- |} <b> Important note about the SIZE in vanilla games!! </b> The size is not accurate, in games like windwaker it will report a smaller count than there actu..."
wikitext
text/x-wiki
__TOC__
<h1>SFT Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || count || Entry Count
|-
| <center>0x04</center> || byte[0xC] || padding || padding
|-
| <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries
|-
|}
<b> Important note about the SIZE in vanilla games!! </b>
The size is not accurate, in games like windwaker it will report a smaller count than there actually is. The only way you can certify that you have the right amount of entries is by either reading EOF of math
<code>(FILE_SIZE - 0x10) / 0x30</code>
The above has worked for me historically.
<h2>StreamEntry</h2>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || byte[0x16] || name || Stream Name
|-
| <center>+0x16</center> || int32 || fileSize || Size
|-
| <center>+0x1C</center> || int16 || sampleRate || Sample Rate
|-
| <center>+0x1E</center> || int16 || format || Stream Format
|-
| <center>+0x20</center> || int16 || padding || padding
|-
| <center>+0x22</center> || int16 || frameRate ||| Frame Rate
|-
| <center>+0x24</center> || int32 || loop || If > 0, loop enabled
|-
| <center>+0x2C</center> || int32 || loopSampleStart || Once the stream ends, if looped, go back to this sample
|-
| <center>+0x30</center> || int64 || padding? || Might be unused, or might contain the leadin samples for the loop...
|-
|}
61967a56ba8ab1b793543647af467ba23428d95a
51
50
2022-03-12T21:11:01Z
Xayr
1
wikitext
text/x-wiki
__TOC__
<h1>SFT Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || count || Entry Count
|-
| <center>0x04</center> || byte[0xC] || padding || padding
|-
| <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries
|-
|}
<b> Important note about the SIZE in vanilla games!! </b>
The size is not accurate, in games like windwaker it will report a smaller count than there actually is. The only way you can certify that you have the right amount of entries is by either reading EOF of math
<code>(FILE_SIZE - 0x10) / 0x30</code>
The above has worked for me historically.
<h2>StreamEntry</h2>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || byte[0x16] || name || Stream Name
|-
| <center>+0x16</center> || int32 || fileSize || Size
|-
| <center>+0x1C</center> || int16 || sampleRate || Sample Rate
|-
| <center>+0x1E</center> || int16 || format || Stream Format
|-
| <center>+0x20</center> || int16 || padding || padding
|-
| <center>+0x22</center> || int16 || frameRate ||| Frame Rate
|-
| <center>+0x24</center> || int32 || loop || If > 0, loop enabled
|-
| <center>+0x28</center> || int32 || loopSampleStart || Once the stream ends, if looped, go back to this sample
|-
| <center>+0x2C</center> || int64 || padding? || Might be unused, or might contain the leadin samples for the loop...
|-
|}
ce318d196a41171f24662bd8dcf30b84078f7f97
52
51
2022-03-12T21:14:07Z
Xayr
1
wikitext
text/x-wiki
__TOC__
<h1>SFT Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || count || Entry Count
|-
| <center>0x04</center> || byte[0xC] || padding || padding
|-
| <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries
|-
|}
<b> Important note about the SIZE in vanilla games!! </b>
The size is not accurate, in games like windwaker it will report a smaller count than there actually is. The only way you can certify that you have the right amount of entries is by either reading EOF of math
<code>(FILE_SIZE - 0x10) / 0x30</code>
The above has worked for me historically.
<h2>StreamEntry</h2>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || byte[0x16] || name || Stream Name
|-
| <center>+0x16</center> || int32 || sampleCount || Sample Count
|-
| <center>+0x1C</center> || int16 || sampleRate || Sample Rate
|-
| <center>+0x1E</center> || int16 || format || Stream Format
|-
| <center>+0x20</center> || int16 || padding || padding
|-
| <center>+0x22</center> || int16 || frameRate ||| Frame Rate
|-
| <center>+0x24</center> || int32 || loop || If > 0, loop enabled
|-
| <center>+0x28</center> || int32 || loopSampleStart || Once the stream ends, if looped, go back to this sample
|-
| <center>+0x2C</center> || int64 || padding? || Might be unused, or might contain the leadin samples for the loop...
|-
|}
2523d235d7dfaf080fd02ffbb4ad05f9245ddbdf
53
52
2022-03-12T21:22:52Z
Xayr
1
wikitext
text/x-wiki
__TOC__
<h1>SFT Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || count || Entry Count
|-
| <center>0x04</center> || byte[0xC] || padding || padding
|-
| <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries
|-
|}
<b> Important note about the SIZE in vanilla games!! </b>
The size is not accurate, in games like windwaker it will report a smaller count than there actually is. The only way you can certify that you have the right amount of entries is by either reading EOF of math
<code>(FILE_SIZE - 0x10) / 0x30</code>
The above has worked for me historically.
<h2>StreamEntry</h2>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || byte[0x10] || name || Stream Name
|-
| <center>+0x10</center> || int32 || size || File Size
|-
| <center>+0x14</center> || int32 || sampleCount || Sample Count
|-
| <center>+0x18</center> || int16 || sampleRate || Sample Rate
|-
| <center>+0x1A</center> || int16 || format || Stream Format
|-
| <center>+0x1C</center> || int16 || padding || padding
|-
| <center>+0x1E</center> || int16 || frameRate ||| Frame Rate
|-
| <center>+0x20</center> || int32 || loop || If > 0, loop enabled
|-
| <center>+0x24</center> || int32 || loopSampleStart || Once the stream ends, if looped, go back to this sample
|-
| <center>+0x28</center> || int64 || padding? || Might be unused, or might contain the leadin samples for the loop...
|-
|}
0965fd510d2468a3a8bf7c845ba6e128a6ec587a
SFT
0
13
54
53
2022-03-12T21:23:22Z
Xayr
1
wikitext
text/x-wiki
__TOC__
<h1>SFT Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || count || Entry Count
|-
| <center>0x04</center> || byte[0xC] || padding || padding
|-
| <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries
|-
|}
<b> Important note about the SIZE in vanilla games!! </b>
The size is not accurate, in games like windwaker it will report a smaller count than there actually is. The only way you can certify that you have the right amount of entries is by either reading EOF of math
<code>(FILE_SIZE - 0x10) / 0x30</code>
The above has worked for me historically.
<h2>StreamEntry</h2>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || byte[0x10] || name || Stream Name or Path to AFC file
|-
| <center>+0x10</center> || int32 || size || File Size
|-
| <center>+0x14</center> || int32 || sampleCount || Sample Count
|-
| <center>+0x18</center> || int16 || sampleRate || Sample Rate
|-
| <center>+0x1A</center> || int16 || format || Stream Format
|-
| <center>+0x1C</center> || int16 || padding || padding
|-
| <center>+0x1E</center> || int16 || frameRate ||| Frame Rate
|-
| <center>+0x20</center> || int32 || loop || If > 0, loop enabled
|-
| <center>+0x24</center> || int32 || loopSampleStart || Once the stream ends, if looped, go back to this sample
|-
| <center>+0x28</center> || int64 || padding? || Might be unused, or might contain the leadin samples for the loop...
|-
|}
702b76fe301e1c9543160c3b1ed4a6aea2e5f237
62
54
2022-03-12T21:51:42Z
Xayr
1
wikitext
text/x-wiki
Stream File Table
__TOC__
<h1>SFT Structure</h1>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int32 || count || Entry Count
|-
| <center>0x04</center> || byte[0xC] || padding || padding
|-
| <center>0x10</center> || [[SFT#StreamEntry | StreamEntry]][]||| Entries
|-
|}
<b> Important note about the SIZE in vanilla games!! </b>
The size is not accurate, in games like windwaker it will report a smaller count than there actually is. The only way you can certify that you have the right amount of entries is by either reading EOF of math
<code>(FILE_SIZE - 0x10) / 0x30</code>
The above has worked for me historically.
<h2>StreamEntry</h2>
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || byte[0x10] || name || Stream Name or Path to AFC file
|-
| <center>+0x10</center> || int32 || size || File Size
|-
| <center>+0x14</center> || int32 || sampleCount || Sample Count
|-
| <center>+0x18</center> || int16 || sampleRate || Sample Rate
|-
| <center>+0x1A</center> || int16 || format || Stream Format
|-
| <center>+0x1C</center> || int16 || padding || padding
|-
| <center>+0x1E</center> || int16 || frameRate ||| Frame Rate
|-
| <center>+0x20</center> || int32 || loop || If > 0, loop enabled
|-
| <center>+0x24</center> || int32 || loopSampleStart || Once the stream ends, if looped, go back to this sample
|-
| <center>+0x28</center> || int64 || padding? || Might be unused, or might contain the leadin samples for the loop...
|-
|}
19d82862d4db2d593cfbff6f19263eebb5ebebd6
BARC
0
14
55
2022-03-12T21:25:53Z
Xayr
1
Created page with "The BARC file is usually the ARC file found in older JSystem games that use JAudio. It most commonly sits in the "Seqs" folder in AudioRes It's useless by itself, but it usually contains useful data. You need the [[HED]] to parse it."
wikitext
text/x-wiki
The BARC file is usually the ARC file found in older JSystem games that use JAudio. It most commonly sits in the "Seqs" folder in AudioRes
It's useless by itself, but it usually contains useful data.
You need the [[HED]] to parse it.
78c1c32639ee651d1346150a54e994c8d52b8a39
60
55
2022-03-12T21:50:57Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Archive</b>
The BARC file is usually the ARC file found in older JSystem games that use JAudio. It most commonly sits in the "Seqs" folder in AudioRes
It's useless by itself, but it usually contains useful data.
You need the [[HED]] to parse it.
1871c6bf2fcb17f4b8cfaa3ee0f4bf53cd7fa526
BMS
0
15
56
2022-03-12T21:46:46Z
Xayr
1
Created page with "I don't have problems, you have problems. __TOC__"
wikitext
text/x-wiki
I don't have problems, you have problems.
__TOC__
5a54ece6e289bf2a97471024062e11564153eaf9
61
56
2022-03-12T21:51:18Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Musical Sequence</b>
I don't have problems, you have problems.
__TOC__
d3a6f304c8028955d68c47b8dc39c472df2011a1
63
61
2022-03-12T22:06:04Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Musical Sequence</b>
I don't have problems, you have problems.
__TOC__
==The Instruction Set==
{| class="wikitable"
! Instruction || Mnemonic || Type || Additional Arguments
|-
| 0x00 - 0x80 || NOTE_ON || NoteOn ||
|-
| 0x80 || CMD_WAIT8 || Wait || int8 LEN,
|-
| 0x81 || NOTE_OFF || NoteOff || None
|-
| 0x88 || CMD_WAIT16 || Wait || int16 LEN
|-
| 0x90 || SETPARAM_90 || Param ||
|-
| 0x91 || SETPARAM_91 || Param ||
|-
| 0x92 || SETPARAM_92 || Param ||
|-
| 0x94 || PERF_U8_NODUR || Perf ||
|-
| 0x96 || PERF_U8_DUR_U8 || Perf ||
|-
| 0x97 || PERF_U8_DUR_U16 || Perf ||
|-
| 0x98 || PERF_S8_NODUR || Perf ||
|-
| 0x9A || PERF_S8_DUR_U8 || Perf ||
|-
| 0x9B || PERF_S8_DUR_U16 || Perf ||
|-
| 0x9C || PERF_S16_NODUR || Perf ||
|-
| 0x9D || PERF_S16_DUR_U8 || Perf ||
|-
| 0x9E || PERF_S16_DUR_U8_9E || Perf ||
|-
| 0x9F || PERF_S16_DUR_U16 || Perf ||
|-
| 0xA0 || PARAM_SET_R || Param ||
|-
| 0xA1 || PARAM_ADD_R || Param ||
|-
| 0xA2 || PARAM_MUL_R || Param ||
|-
| 0xA3 || PARAM_CMP_R || Param ||
|-
| 0xA4 || PARAM_SET_8 || Param ||
|-
| 0xA5 || PARAM_ADD_8 || Param ||
|-
| 0xA6 || PARAM_MUL_8 || Param ||
|-
| 0xA7 || PARAM_CMP_8 || Param ||
|-
| 0xA8 || PARAM_LOAD_UNK || ? ||
|-
| 0xA9 || PARAM_BITWISE || Param ||
|-
| 0xAA || PARAM_LOADTBL || Param ||
|-
| 0xAB || PARAM_SUBTRACT || Param ||
|-
| 0xAC || PARAM_SET_16 || Param ||
|-
| 0xAD || PARAM_ADD_16 || Param ||
|-
| 0xAE || PARAM_MUL_16 || Param ||
|-
| 0xAF || PARAM_CMP_16 || Param ||
|-
| 0xB0 || OPOVERRIDE_1 || Override ||
|-
| 0xB1 || OPOVERRIDE_2 || Override ||
|-
| 0xB4 || OPOVERRIDE_4 || Override ||
|-
| 0xB8 || OPOVERRIDE_R || Override ||
|-
| 0xC1 || OPENTRACK || Track ||
|-
| 0xC2 || OPENTRACKBROS || Track ||
|-
| 0xC4 || CALL || Flow ||
|-
| 0xC5 || RETURN_NOARG || Flow ||
|-
| 0xC6 || RETURN || Flow ||
|-
| 0xC8 || JMP || Flow ||
|-
| 0xC9 || LOOP_S || Flow ||
|-
| 0xCA || LOOP_E || Flow ||
|-
| 0xCB || READPORT || Port ||
|-
| 0xCC || WRITEPORT || Port ||
|-
| 0xCD || CHECKPORTIMPORT || Port ||
|-
| 0xCE || CHECKPORTEXPORT || Port ||
|-
| 0xCF || CMD_WAITR || Wait ||
|-
| 0xD1 || PARENTWRITEPORT || Port ||
|-
| 0xD2 || CHILDWRITEPORT || Port ||
|-
| 0xD4 || SETLASTNOTE || ||
|-
| 0xD5 || TIMERELATE || ||
|-
| 0xD6 || SIMPLEOSC || Oscillator ||
|-
| 0xD7 || SIMPLEENV || Envelope ||
|-
| 0xD8 || SIMPLEADSR || ||
|-
| 0xD9 || TRANSPOSE || ||
|-
| 0xDA || CLOSETRACK || Track ||
|-
| 0xDB || OUTSWITCH || ||
|-
| 0xDC || UPDATESYNC || ||
|-
| 0xDD || BUSCONNECT || Port ||
|-
| 0xDE || PAUSESTATUS || Flow ||
|-
| 0xDF || SETINTERRUPT || Interrupt ||
|-
| 0xE0 || DISINTERRUPT || Interrupt ||
|-
| 0xE1 || CLRI || Interrupt ||
|-
| 0xE2 || SETI || Interrupt ||
|-
| 0xE3 || RETI || Interrupt ||
|-
| 0xE4 || INTTIMER || Interrupt ||
|-
| 0xE5 || VIBDEPTH || ||
|-
| 0xE6 || VIBDEPTHMIDI || ||
|-
| 0xE7 || SYNCCPU || Flow ||
|-
| 0xE8 || FLUSHALL || ||
|-
| 0xE9 || FLUSHRELEASE || ||
|-
| 0xEA || WAIT_VLQ || Wait ||
|-
| 0xEB || PANPOWSET || ||
|-
| 0xEC || IIRSET || ||
|-
| 0xED || FIRSET || ||
|-
| 0xEE || EXTSET || ||
|-
| 0xEF || PANSWSET || ||
|-
| 0xF0 || OSCROUTE || ||
|-
| 0xF1 || IIRCUTOFF || ||
|-
| 0xF2 || OSCFULL || ||
|-
| 0xF3 || VOLUMEMODE || ||
|-
| 0xF4 || VIBPITCH || ||
|-
| 0xFA || CHECKWAVE || ||
|-
| 0xFB || PRINTF || PrintF || Variable
|-
| 0xFC || NOP || Misc || Skips this opcode, can be used for patching things out
|-
| 0xFD || TEMPO || Flow || int16 Tempo
|-
| 0xFE || TIMEBASE || Flow || int16 Timebase
|-
| 0xFF || FINISH || Track ||
|}
9c558c21d06975a1a0b4653116074b6519e80afa
64
63
2022-03-12T22:15:35Z
Xayr
1
/* The Instruction Set */
wikitext
text/x-wiki
<b>Binary Musical Sequence</b>
I don't have problems, you have problems.
__TOC__
==The Instruction Set==
{| class="wikitable"
! Instruction || Mnemonic || Type || Additional Arguments
|-
| 0x00 - 0x80 || NOTE_ON || NoteOn || Variable
|-
| 0x80 || CMD_WAIT8 || Wait || int8 LEN,
|-
| 0x81 || NOTE_OFF || NoteOff || None
|-
| 0x88 || CMD_WAIT16 || Wait || int16 LEN
|-
| 0x90 || SETPARAM_90 || Param || byte Destination Register, byte Value
|-
| 0x91 || SETPARAM_91 || Param || byte Destination Register, byte Value
|-
| 0x92 || SETPARAM_92 || Param || byte Destination Register, byte Value
|-
| 0x94 || PERF_U8_NODUR || Perf || byte PERFValue, byte value
|-
| 0x96 || PERF_U8_DUR_U8 || Perf || byte PERFValue, byte value, byte duration
|-
| 0x97 || PERF_U8_DUR_U16 || Perf || byte PERFValue, byte value, short duration
|-
| 0x98 || PERF_S8_NODUR || Perf || byte PERFValue, sbyte value
|-
| 0x9A || PERF_S8_DUR_U8 || Perf || byte PERFValue, sbyte value, byte duration
|-
| 0x9B || PERF_S8_DUR_U16 || Perf || byte PERFValue, sbyte value, short duration
|-
| 0x9C || PERF_S16_NODUR || Perf || byte PERFValue, short value
|-
| 0x9D || PERF_S16_DUR_U8 || Perf || byte PERFValue, short value, byte duration
|-
| 0x9E || PERF_S16_DUR_U8_9E || Perf || byte PERFValue, short value, byte duration
|-
| 0x9F || PERF_S16_DUR_U16 || Perf || byte PERFValue, short value, short duration
|-
| 0xA0 || PARAM_SET_R || Param || byte dest_register, byte src_register
|-
| 0xA1 || PARAM_ADD_R || Param || byte dest_register, byte src_register
|-
| 0xA2 || PARAM_MUL_R || Param || byte dest_register, byte src_register
|-
| 0xA3 || PARAM_CMP_R || Param || byte dest_register, byte src_register
|-
| 0xA4 || PARAM_SET_8 || Param || byte register, byte value
|-
| 0xA5 || PARAM_ADD_8 || Param || byte register, byte value
|-
| 0xA6 || PARAM_MUL_8 || Param || byte register, byte value
|-
| 0xA7 || PARAM_CMP_8 || Param || byte register, byte value
|-
| 0xA8 || PARAM_LOAD_UNK || ? || ?
|-
| 0xA9 || PARAM_BITWISE || Param ||
|-
| 0xAA || PARAM_LOADTBL || Param ||
|-
| 0xAB || PARAM_SUBTRACT || Param ||
|-
| 0xAC || PARAM_SET_16 || Param || byte register, short value
|-
| 0xAD || PARAM_ADD_16 || Param || byte register, short value
|-
| 0xAE || PARAM_MUL_16 || Param || byte register, short value
|-
| 0xAF || PARAM_CMP_16 || Param || byte register, short value
|-
| 0xB0 || OPOVERRIDE_1 || Override || It's complicated.
|-
| 0xB1 || OPOVERRIDE_2 || Override ||
|-
| 0xB4 || OPOVERRIDE_4 || Override ||
|-
| 0xB8 || OPOVERRIDE_R || Override ||
|-
| 0xC1 || OPENTRACK || Track || byte trackID <= 0xF, int24 trackID
|-
| 0xC2 || OPENTRACKBROS || Track ||
|-
| 0xC4 || CALL || Flow || byte condition, int24 address
|-
| 0xC5 || RETURN_NOARG || Flow ||
|-
| 0xC6 || RETURN || Flow || byte condition
|-
| 0xC8 || JMP || Flow || int24 address
|-
| 0xC9 || LOOP_S || Flow || byte count
|-
| 0xCA || LOOP_E || Flow ||
|-
| 0xCB || READPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCC || WRITEPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCD || CHECKPORTIMPORT || Port || byte srcPort
|-
| 0xCE || CHECKPORTEXPORT || Port || byte srcPort
|-
| 0xCF || CMD_WAITR || Wait || byte register
|-
| 0xD1 || PARENTWRITEPORT || Port ||
|-
| 0xD2 || CHILDWRITEPORT || Port ||
|-
| 0xD4 || SETLASTNOTE || || byte lastNoteValue
|-
| 0xD5 || TIMERELATE || ||
|-
| 0xD6 || SIMPLEOSC || Oscillator ||
|-
| 0xD7 || SIMPLEENV || Envelope ||
|-
| 0xD8 || SIMPLEADSR || ||
|-
| 0xD9 || TRANSPOSE || ||
|-
| 0xDA || CLOSETRACK || Track || byte trackID
|-
| 0xDB || OUTSWITCH || ||
|-
| 0xDC || UPDATESYNC || ||
|-
| 0xDD || BUSCONNECT || Port ||
|-
| 0xDE || PAUSESTATUS || Flow ||
|-
| 0xDF || SETINTERRUPT || Interrupt || byte InterruptID, int24 Callback_Address
|-
| 0xE0 || DISINTERRUPT || Interrupt ||
|-
| 0xE1 || CLRI || Interrupt ||
|-
| 0xE2 || SETI || Interrupt ||
|-
| 0xE3 || RETI || Interrupt ||
|-
| 0xE4 || INTTIMER || Interrupt ||
|-
| 0xE5 || VIBDEPTH || ||
|-
| 0xE6 || VIBDEPTHMIDI || ||
|-
| 0xE7 || SYNCCPU || Flow || short syncdata?
|-
| 0xE8 || FLUSHALL || ||
|-
| 0xE9 || FLUSHRELEASE || ||
|-
| 0xEA || WAIT_VLQ || Wait || VLC delay
|-
| 0xEB || PANPOWSET || ||
|-
| 0xEC || IIRSET || ||
|-
| 0xED || FIRSET || ||
|-
| 0xEE || EXTSET || ||
|-
| 0xEF || PANSWSET || ||
|-
| 0xF0 || OSCROUTE || ||
|-
| 0xF1 || IIRCUTOFF || ||
|-
| 0xF2 || OSCFULL || ||
|-
| 0xF3 || VOLUMEMODE || ||
|-
| 0xF4 || VIBPITCH || ||
|-
| 0xFA || CHECKWAVE || ||
|-
| 0xFB || PRINTF || PrintF || Variable
|-
| 0xFC || NOP || Misc || Skips this opcode, can be used for patching things out
|-
| 0xFD || TEMPO || Flow || int16 Tempo
|-
| 0xFE || TIMEBASE || Flow || int16 Timebase
|-
| 0xFF || FINISH || Track ||
|}
122ed2a971f83037999b8e05d1062824b6e99fe1
65
64
2022-03-12T22:20:15Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Musical Sequence</b>
I don't have problems, you have problems.
__TOC__
==Tracks==
Tracks are an independent "thread" that will execute BMS instructions alongside other tracks.
A track can have up to 16 children, all of which must be other tracks.
Each track has
* 24 Registers
* 7 voices
* Its own stack / address history
* Its own instrument / bank selection
* Its own independent wait timer
etc.
A BMS file is opened by the "root track" which is the start of the file opening up a bunch of child tracks. The root track usually sits and controls stuff like the tempo, while the child tracks will do the actual playing of music.
BMS will execute instructions on a track endlessly and all at once until the track has either been terminated, paused, or ESPECIALLY <b>if the wait timer is > 0</b>
==The Instruction Set==
{| class="wikitable"
! Instruction || Mnemonic || Type || Additional Arguments
|-
| 0x00 - 0x80 || NOTE_ON || NoteOn || Variable
|-
| 0x80 || CMD_WAIT8 || Wait || int8 LEN,
|-
| 0x81 || NOTE_OFF || NoteOff || None
|-
| 0x88 || CMD_WAIT16 || Wait || int16 LEN
|-
| 0x90 || SETPARAM_90 || Param || byte Destination Register, byte Value
|-
| 0x91 || SETPARAM_91 || Param || byte Destination Register, byte Value
|-
| 0x92 || SETPARAM_92 || Param || byte Destination Register, byte Value
|-
| 0x94 || PERF_U8_NODUR || Perf || byte PERFValue, byte value
|-
| 0x96 || PERF_U8_DUR_U8 || Perf || byte PERFValue, byte value, byte duration
|-
| 0x97 || PERF_U8_DUR_U16 || Perf || byte PERFValue, byte value, short duration
|-
| 0x98 || PERF_S8_NODUR || Perf || byte PERFValue, sbyte value
|-
| 0x9A || PERF_S8_DUR_U8 || Perf || byte PERFValue, sbyte value, byte duration
|-
| 0x9B || PERF_S8_DUR_U16 || Perf || byte PERFValue, sbyte value, short duration
|-
| 0x9C || PERF_S16_NODUR || Perf || byte PERFValue, short value
|-
| 0x9D || PERF_S16_DUR_U8 || Perf || byte PERFValue, short value, byte duration
|-
| 0x9E || PERF_S16_DUR_U8_9E || Perf || byte PERFValue, short value, byte duration
|-
| 0x9F || PERF_S16_DUR_U16 || Perf || byte PERFValue, short value, short duration
|-
| 0xA0 || PARAM_SET_R || Param || byte dest_register, byte src_register
|-
| 0xA1 || PARAM_ADD_R || Param || byte dest_register, byte src_register
|-
| 0xA2 || PARAM_MUL_R || Param || byte dest_register, byte src_register
|-
| 0xA3 || PARAM_CMP_R || Param || byte dest_register, byte src_register
|-
| 0xA4 || PARAM_SET_8 || Param || byte register, byte value
|-
| 0xA5 || PARAM_ADD_8 || Param || byte register, byte value
|-
| 0xA6 || PARAM_MUL_8 || Param || byte register, byte value
|-
| 0xA7 || PARAM_CMP_8 || Param || byte register, byte value
|-
| 0xA8 || PARAM_LOAD_UNK || ? || ?
|-
| 0xA9 || PARAM_BITWISE || Param ||
|-
| 0xAA || PARAM_LOADTBL || Param ||
|-
| 0xAB || PARAM_SUBTRACT || Param ||
|-
| 0xAC || PARAM_SET_16 || Param || byte register, short value
|-
| 0xAD || PARAM_ADD_16 || Param || byte register, short value
|-
| 0xAE || PARAM_MUL_16 || Param || byte register, short value
|-
| 0xAF || PARAM_CMP_16 || Param || byte register, short value
|-
| 0xB0 || OPOVERRIDE_1 || Override || It's complicated.
|-
| 0xB1 || OPOVERRIDE_2 || Override ||
|-
| 0xB4 || OPOVERRIDE_4 || Override ||
|-
| 0xB8 || OPOVERRIDE_R || Override ||
|-
| 0xC1 || OPENTRACK || Track || byte trackID <= 0xF, int24 trackID
|-
| 0xC2 || OPENTRACKBROS || Track ||
|-
| 0xC4 || CALL || Flow || byte condition, int24 address
|-
| 0xC5 || RETURN_NOARG || Flow ||
|-
| 0xC6 || RETURN || Flow || byte condition
|-
| 0xC8 || JMP || Flow || int24 address
|-
| 0xC9 || LOOP_S || Flow || byte count
|-
| 0xCA || LOOP_E || Flow ||
|-
| 0xCB || READPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCC || WRITEPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCD || CHECKPORTIMPORT || Port || byte srcPort
|-
| 0xCE || CHECKPORTEXPORT || Port || byte srcPort
|-
| 0xCF || CMD_WAITR || Wait || byte register
|-
| 0xD1 || PARENTWRITEPORT || Port ||
|-
| 0xD2 || CHILDWRITEPORT || Port ||
|-
| 0xD4 || SETLASTNOTE || || byte lastNoteValue
|-
| 0xD5 || TIMERELATE || ||
|-
| 0xD6 || SIMPLEOSC || Oscillator ||
|-
| 0xD7 || SIMPLEENV || Envelope ||
|-
| 0xD8 || SIMPLEADSR || ||
|-
| 0xD9 || TRANSPOSE || ||
|-
| 0xDA || CLOSETRACK || Track || byte trackID
|-
| 0xDB || OUTSWITCH || ||
|-
| 0xDC || UPDATESYNC || ||
|-
| 0xDD || BUSCONNECT || Port ||
|-
| 0xDE || PAUSESTATUS || Flow ||
|-
| 0xDF || SETINTERRUPT || Interrupt || byte InterruptID, int24 Callback_Address
|-
| 0xE0 || DISINTERRUPT || Interrupt ||
|-
| 0xE1 || CLRI || Interrupt ||
|-
| 0xE2 || SETI || Interrupt ||
|-
| 0xE3 || RETI || Interrupt ||
|-
| 0xE4 || INTTIMER || Interrupt ||
|-
| 0xE5 || VIBDEPTH || ||
|-
| 0xE6 || VIBDEPTHMIDI || ||
|-
| 0xE7 || SYNCCPU || Flow || short syncdata?
|-
| 0xE8 || FLUSHALL || ||
|-
| 0xE9 || FLUSHRELEASE || ||
|-
| 0xEA || WAIT_VLQ || Wait || VLC delay
|-
| 0xEB || PANPOWSET || ||
|-
| 0xEC || IIRSET || ||
|-
| 0xED || FIRSET || ||
|-
| 0xEE || EXTSET || ||
|-
| 0xEF || PANSWSET || ||
|-
| 0xF0 || OSCROUTE || ||
|-
| 0xF1 || IIRCUTOFF || ||
|-
| 0xF2 || OSCFULL || ||
|-
| 0xF3 || VOLUMEMODE || ||
|-
| 0xF4 || VIBPITCH || ||
|-
| 0xFA || CHECKWAVE || ||
|-
| 0xFB || PRINTF || PrintF || Variable
|-
| 0xFC || NOP || Misc || Skips this opcode, can be used for patching things out
|-
| 0xFD || TEMPO || Flow || int16 Tempo
|-
| 0xFE || TIMEBASE || Flow || int16 Timebase
|-
| 0xFF || FINISH || Track ||
|}
710a8a04277b71ff940c819dfd7a6e537bccd8e3
67
65
2022-03-12T22:28:50Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Musical Sequence</b>
I don't have problems, you have problems.
__TOC__
==Tracks==
Tracks are an independent "thread" that will execute BMS instructions alongside other tracks.
A track can have up to 16 children, all of which must be other tracks.
Each track has
* 24 Registers
* 7 voices
* Its own stack / address history
* Its own instrument / bank selection
* Its own independent wait timer
etc.
A BMS file is opened by the "root track" which is the start of the file opening up a bunch of child tracks.
[[Image:BMS_OpenTrack.png]]
The root track usually sits and controls stuff like the tempo, while the child tracks will do the actual playing of music.
BMS will execute instructions on a track endlessly and all at once until the track has either been terminated, paused, or ESPECIALLY <b>if the wait timer is > 0</b>
==The Instruction Set==
{| class="wikitable"
! Instruction || Mnemonic || Type || Additional Arguments
|-
| 0x00 - 0x80 || NOTE_ON || NoteOn || Variable
|-
| 0x80 || CMD_WAIT8 || Wait || int8 LEN,
|-
| 0x81 || NOTE_OFF || NoteOff || None
|-
| 0x88 || CMD_WAIT16 || Wait || int16 LEN
|-
| 0x90 || SETPARAM_90 || Param || byte Destination Register, byte Value
|-
| 0x91 || SETPARAM_91 || Param || byte Destination Register, byte Value
|-
| 0x92 || SETPARAM_92 || Param || byte Destination Register, byte Value
|-
| 0x94 || PERF_U8_NODUR || Perf || byte PERFValue, byte value
|-
| 0x96 || PERF_U8_DUR_U8 || Perf || byte PERFValue, byte value, byte duration
|-
| 0x97 || PERF_U8_DUR_U16 || Perf || byte PERFValue, byte value, short duration
|-
| 0x98 || PERF_S8_NODUR || Perf || byte PERFValue, sbyte value
|-
| 0x9A || PERF_S8_DUR_U8 || Perf || byte PERFValue, sbyte value, byte duration
|-
| 0x9B || PERF_S8_DUR_U16 || Perf || byte PERFValue, sbyte value, short duration
|-
| 0x9C || PERF_S16_NODUR || Perf || byte PERFValue, short value
|-
| 0x9D || PERF_S16_DUR_U8 || Perf || byte PERFValue, short value, byte duration
|-
| 0x9E || PERF_S16_DUR_U8_9E || Perf || byte PERFValue, short value, byte duration
|-
| 0x9F || PERF_S16_DUR_U16 || Perf || byte PERFValue, short value, short duration
|-
| 0xA0 || PARAM_SET_R || Param || byte dest_register, byte src_register
|-
| 0xA1 || PARAM_ADD_R || Param || byte dest_register, byte src_register
|-
| 0xA2 || PARAM_MUL_R || Param || byte dest_register, byte src_register
|-
| 0xA3 || PARAM_CMP_R || Param || byte dest_register, byte src_register
|-
| 0xA4 || PARAM_SET_8 || Param || byte register, byte value
|-
| 0xA5 || PARAM_ADD_8 || Param || byte register, byte value
|-
| 0xA6 || PARAM_MUL_8 || Param || byte register, byte value
|-
| 0xA7 || PARAM_CMP_8 || Param || byte register, byte value
|-
| 0xA8 || PARAM_LOAD_UNK || ? || ?
|-
| 0xA9 || PARAM_BITWISE || Param ||
|-
| 0xAA || PARAM_LOADTBL || Param ||
|-
| 0xAB || PARAM_SUBTRACT || Param ||
|-
| 0xAC || PARAM_SET_16 || Param || byte register, short value
|-
| 0xAD || PARAM_ADD_16 || Param || byte register, short value
|-
| 0xAE || PARAM_MUL_16 || Param || byte register, short value
|-
| 0xAF || PARAM_CMP_16 || Param || byte register, short value
|-
| 0xB0 || OPOVERRIDE_1 || Override || It's complicated.
|-
| 0xB1 || OPOVERRIDE_2 || Override ||
|-
| 0xB4 || OPOVERRIDE_4 || Override ||
|-
| 0xB8 || OPOVERRIDE_R || Override ||
|-
| 0xC1 || OPENTRACK || Track || byte trackID <= 0xF, int24 trackID
|-
| 0xC2 || OPENTRACKBROS || Track ||
|-
| 0xC4 || CALL || Flow || byte condition, int24 address
|-
| 0xC5 || RETURN_NOARG || Flow ||
|-
| 0xC6 || RETURN || Flow || byte condition
|-
| 0xC8 || JMP || Flow || int24 address
|-
| 0xC9 || LOOP_S || Flow || byte count
|-
| 0xCA || LOOP_E || Flow ||
|-
| 0xCB || READPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCC || WRITEPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCD || CHECKPORTIMPORT || Port || byte srcPort
|-
| 0xCE || CHECKPORTEXPORT || Port || byte srcPort
|-
| 0xCF || CMD_WAITR || Wait || byte register
|-
| 0xD1 || PARENTWRITEPORT || Port ||
|-
| 0xD2 || CHILDWRITEPORT || Port ||
|-
| 0xD4 || SETLASTNOTE || || byte lastNoteValue
|-
| 0xD5 || TIMERELATE || ||
|-
| 0xD6 || SIMPLEOSC || Oscillator ||
|-
| 0xD7 || SIMPLEENV || Envelope ||
|-
| 0xD8 || SIMPLEADSR || ||
|-
| 0xD9 || TRANSPOSE || ||
|-
| 0xDA || CLOSETRACK || Track || byte trackID
|-
| 0xDB || OUTSWITCH || ||
|-
| 0xDC || UPDATESYNC || ||
|-
| 0xDD || BUSCONNECT || Port ||
|-
| 0xDE || PAUSESTATUS || Flow ||
|-
| 0xDF || SETINTERRUPT || Interrupt || byte InterruptID, int24 Callback_Address
|-
| 0xE0 || DISINTERRUPT || Interrupt ||
|-
| 0xE1 || CLRI || Interrupt ||
|-
| 0xE2 || SETI || Interrupt ||
|-
| 0xE3 || RETI || Interrupt ||
|-
| 0xE4 || INTTIMER || Interrupt ||
|-
| 0xE5 || VIBDEPTH || ||
|-
| 0xE6 || VIBDEPTHMIDI || ||
|-
| 0xE7 || SYNCCPU || Flow || short syncdata?
|-
| 0xE8 || FLUSHALL || ||
|-
| 0xE9 || FLUSHRELEASE || ||
|-
| 0xEA || WAIT_VLQ || Wait || VLC delay
|-
| 0xEB || PANPOWSET || ||
|-
| 0xEC || IIRSET || ||
|-
| 0xED || FIRSET || ||
|-
| 0xEE || EXTSET || ||
|-
| 0xEF || PANSWSET || ||
|-
| 0xF0 || OSCROUTE || ||
|-
| 0xF1 || IIRCUTOFF || ||
|-
| 0xF2 || OSCFULL || ||
|-
| 0xF3 || VOLUMEMODE || ||
|-
| 0xF4 || VIBPITCH || ||
|-
| 0xFA || CHECKWAVE || ||
|-
| 0xFB || PRINTF || PrintF || Variable
|-
| 0xFC || NOP || Misc || Skips this opcode, can be used for patching things out
|-
| 0xFD || TEMPO || Flow || int16 Tempo
|-
| 0xFE || TIMEBASE || Flow || int16 Timebase
|-
| 0xFF || FINISH || Track ||
|}
be7125b189b8f9d6cf58be19eb66519d0b88c1ed
68
67
2022-03-12T22:30:14Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Musical Sequence</b>
I don't have problems, you have problems.
__TOC__
==Tracks==
Tracks are an independent "thread" that will execute BMS instructions alongside other tracks.
A track can have up to 16 children, all of which must be other tracks.
Each track has
* 24 Registers
* 7 voices
* Its own stack / address history
* Its own instrument / bank selection
* Its own independent wait timer
etc.
A BMS file is opened by the "root track" which is the start of the file opening up a bunch of child tracks.
[[Image:BMS_OpenTrack.png]]
The root track usually sits and controls stuff like the tempo, while the child tracks will do the actual playing of music.
BMS will execute instructions on a track endlessly and all at once until the track has either been terminated, paused, or ESPECIALLY <b>if the wait timer is > 0</b>
==The Instruction Set==
{| class="wikitable"
! Instruction || Mnemonic || Type || Additional Arguments
|-
| 0x00 - 0x80 || NOTE_ON || NoteOn || Variable
|-
| 0x80 || CMD_WAIT8 || Wait || int8 LEN,
|-
| 0x81 || NOTE_OFF || NoteOff || None
|-
| 0x88 || CMD_WAIT16 || Wait || int16 LEN
|-
| 0x90 || SETPARAM_90 || Param || byte Destination Register, byte Value
|-
| 0x91 || SETPARAM_91 || Param || byte Destination Register, byte Value
|-
| 0x92 || SETPARAM_92 || Param || byte Destination Register, byte Value
|-
| 0x94 || PERF_U8_NODUR || Perf || byte PERFValue, byte value
|-
| 0x96 || PERF_U8_DUR_U8 || Perf || byte PERFValue, byte value, byte duration
|-
| 0x97 || PERF_U8_DUR_U16 || Perf || byte PERFValue, byte value, short duration
|-
| 0x98 || PERF_S8_NODUR || Perf || byte PERFValue, sbyte value
|-
| 0x9A || PERF_S8_DUR_U8 || Perf || byte PERFValue, sbyte value, byte duration
|-
| 0x9B || PERF_S8_DUR_U16 || Perf || byte PERFValue, sbyte value, short duration
|-
| 0x9C || PERF_S16_NODUR || Perf || byte PERFValue, short value
|-
| 0x9D || PERF_S16_DUR_U8 || Perf || byte PERFValue, short value, byte duration
|-
| 0x9E || PERF_S16_DUR_U8_9E || Perf || byte PERFValue, short value, byte duration
|-
| 0x9F || PERF_S16_DUR_U16 || Perf || byte PERFValue, short value, short duration
|-
| 0xA0 || PARAM_SET_R || Param || byte dest_register, byte src_register
|-
| 0xA1 || PARAM_ADD_R || Param || byte dest_register, byte src_register
|-
| 0xA2 || PARAM_MUL_R || Param || byte dest_register, byte src_register
|-
| 0xA3 || PARAM_CMP_R || Param || byte dest_register, byte src_register
|-
| 0xA4 || PARAM_SET_8 || Param || byte register, byte value
|-
| 0xA5 || PARAM_ADD_8 || Param || byte register, byte value
|-
| 0xA6 || PARAM_MUL_8 || Param || byte register, byte value
|-
| 0xA7 || PARAM_CMP_8 || Param || byte register, byte value
|-
| 0xA8 || PARAM_LOAD_UNK || ? || ?
|-
| 0xA9 || PARAM_BITWISE || Param ||
|-
| 0xAA || PARAM_LOADTBL || Param ||
|-
| 0xAB || PARAM_SUBTRACT || Param ||
|-
| 0xAC || PARAM_SET_16 || Param || byte register, short value
|-
| 0xAD || PARAM_ADD_16 || Param || byte register, short value
|-
| 0xAE || PARAM_MUL_16 || Param || byte register, short value
|-
| 0xAF || PARAM_CMP_16 || Param || byte register, short value
|-
| 0xB0 || OPOVERRIDE_1 || Override || It's complicated.
|-
| 0xB1 || OPOVERRIDE_2 || Override ||
|-
| 0xB4 || OPOVERRIDE_4 || Override ||
|-
| 0xB8 || OPOVERRIDE_R || Override ||
|-
| 0xC1 || OPENTRACK || Track || byte trackID <= 0xF, int24 trackID
|-
| 0xC2 || OPENTRACKBROS || Track ||
|-
| 0xC4 || CALL || Flow || byte condition, int24 address
|-
| 0xC5 || RETURN_NOARG || Flow ||
|-
| 0xC6 || RETURN || Flow || byte condition
|-
| 0xC8 || JMP || Flow || int24 address
|-
| 0xC9 || LOOP_S || Flow || byte count
|-
| 0xCA || LOOP_E || Flow ||
|-
| 0xCB || READPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCC || WRITEPORT || Port || byte srcPort, byte dstRegister
|-
| 0xCD || CHECKPORTIMPORT || Port || byte srcPort
|-
| 0xCE || CHECKPORTEXPORT || Port || byte srcPort
|-
| 0xCF || CMD_WAITR || Wait || byte register
|-
| 0xD1 || PARENTWRITEPORT || Port ||
|-
| 0xD2 || CHILDWRITEPORT || Port ||
|-
| 0xD4 || SETLASTNOTE || || byte lastNoteValue
|-
| 0xD5 || TIMERELATE || ||
|-
| 0xD6 || SIMPLEOSC || Oscillator ||
|-
| 0xD7 || SIMPLEENV || Envelope ||
|-
| 0xD8 || SIMPLEADSR || ||
|-
| 0xD9 || TRANSPOSE || ||
|-
| 0xDA || CLOSETRACK || Track || byte trackID
|-
| 0xDB || OUTSWITCH || ||
|-
| 0xDC || UPDATESYNC || ||
|-
| 0xDD || BUSCONNECT || Port ||
|-
| 0xDE || PAUSESTATUS || Flow ||
|-
| 0xDF || SETINTERRUPT || Interrupt || byte InterruptID, int24 Callback_Address
|-
| 0xE0 || DISINTERRUPT || Interrupt ||
|-
| 0xE1 || CLRI || Interrupt ||
|-
| 0xE2 || SETI || Interrupt ||
|-
| 0xE3 || RETI || Interrupt ||
|-
| 0xE4 || INTTIMER || Interrupt ||
|-
| 0xE5 || VIBDEPTH || ||
|-
| 0xE6 || VIBDEPTHMIDI || ||
|-
| 0xE7 || SYNCCPU || Flow || short syncdata?
|-
| 0xE8 || FLUSHALL || ||
|-
| 0xE9 || FLUSHRELEASE || ||
|-
| 0xEA || WAIT_VLQ || Wait || VLC delay
|-
| 0xEB || PANPOWSET || ||
|-
| 0xEC || IIRSET || ||
|-
| 0xED || FIRSET || ||
|-
| 0xEE || EXTSET || ||
|-
| 0xEF || PANSWSET || ||
|-
| 0xF0 || OSCROUTE || ||
|-
| 0xF1 || IIRCUTOFF || ||
|-
| 0xF2 || OSCFULL || ||
|-
| 0xF3 || VOLUMEMODE || ||
|-
| 0xF4 || VIBPITCH || ||
|-
| 0xFA || CHECKWAVE || ||
|-
| 0xFB || PRINTF || PrintF || Variable
|-
| 0xFC || NOP || Misc || Skips this opcode, can be used for patching things out
|-
| 0xFD || TEMPO || Flow || int16 Tempo
|-
| 0xFE || TIMEBASE || Flow || int16 Timebase
|-
| 0xFF || FINISH || Track ||
|}
e1a75914c9155fa44576ae37a8bce7ede2bb4f88
AAF
0
8
57
44
2022-03-12T21:49:53Z
Xayr
1
wikitext
text/x-wiki
'''AAF''' stores sound effect, wave, instrument, and music data.
AUDIO ARCHIVE FILE
=AAF Header=
The file's headers is composed to several int32's packed in a common format.
The first int32 will always read the ID of a section. When you read 0, you stop reading.
Header Entry Structure
{| class="wikitable"
|-
! id !! Structure !! Description
|-
| <center>0</center> || (none) || Tells to stop reading this section
|-
| <center>1</center> || (int32 offset, int32 size, int32 type) || Pointer to the BST (Binary Sound Table)
|-
| <center>2</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || IBNK Pointer Table
|-
| <center>3</center> || (int32 offset, int32 size, int32 flags) until offset = 0 then continue || WSYS Pointer Table
|-
| <center>4</center> || (int32 offset, int32 size, int32 type) || Pointer to BSC (Binary Sequence Collection)
|-
| <center>5</center> || (int32 offset, int32 size, int32 type) || Pointer to the BSM (Binary Stream Map)
|}
=== Sample Parsing Code ===
<nowiki>while (true)
{
var ChunkID = aafRead.ReadUInt32();
switch (ChunkID)
{
case 0:
return;
case 1:
case 5:
case 4:
case 6:
case 7:
{
offset = aafRead.ReadUInt32();
size = aafRead.ReadUInt32();
type = aafRead.ReadUInt32();
break;
}
case 2: // INST
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
}
break;
case 3: // WSYS
{
while (true)
{
var offset = aafRead.ReadUInt32();
if (offset == 0)
break; // 0 means we reached the end.
var size = aafRead.ReadUInt32();
var type = aafRead.ReadUInt32();
}
break;
}
}
}</nowiki>
836093d7b33bda8c32f6c466142b57da86d8191f
AW
0
10
58
39
2022-03-12T21:50:08Z
Xayr
1
wikitext
text/x-wiki
AUDIO WAVE
The .AW file is a raw cluster of mostly unpadded ADPCM4 data.
This file is completely useless by itself, to parse it, you need a [[WSYS]]
a58c44b6fd39be271e5f3597b085baa7c79bbe59
ASN
0
12
59
48
2022-03-12T21:50:31Z
Xayr
1
wikitext
text/x-wiki
<b>Audio Sound Names</b>
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte[0x0E] || 0 || Zero padding
|-
| <center>0x0E</center> || short || soundCount || Count of sounds
|-
| <center>0x10</center> || [[ASN#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1c</center> || short || categoryID || Count of sounds
|-
| <center>0x20</center> || short || Category Index || Category Index
|-
|}
0f6e8f642253e8877aaf337d18b32584c75cbdb6
69
59
2022-03-13T04:41:10Z
Xayr
1
wikitext
text/x-wiki
<b>Audio Sound Names</b>
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte[0x0E] || 0 || Zero padding
|-
| <center>0x0E</center> || short || soundCount || Count of sounds
|-
| <center>0x10</center> || [[ASN#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
Note: Categories MUST be sorted by their ID before they are read.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1c</center> || short || categoryID || Count of sounds
|-
| <center>0x20</center> || short || Category Index || Category Index
|-
|}
3359ec5aecfa16235283b6040ba0a4847e8e9c4f
70
69
2022-03-13T04:48:19Z
Xayr
1
wikitext
text/x-wiki
<b>Audio Sound Names</b>
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte[0x0E] || 0 || Zero padding
|-
| <center>0x0E</center> || short || soundCount || Count of sounds
|-
| <center>0x10</center> || [[ASN#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1c</center> || short || length || Count of sounds
|-
| <center>0x20</center> || short || categoryID || Category Index
|-
| <center>Not Inline</center> || waves[length] || waves || Waves
|-
|}
After all of the categories are parsed, you can start parsing waves.
==Waves==
Note: You must sort the categories by their ID before reading the names. The names are packed back-to-back.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1C</center> || short || accessMode || Access mode indicator
|-
| <center>0x1E</center> || short || id || WaveID
|-
|}
e97f2a79c00a7c3db5d2bb1cf108917e42013d81
71
70
2022-03-13T04:48:32Z
Xayr
1
wikitext
text/x-wiki
<b>Audio Sound Names</b>
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte[0x0E] || 0 || Zero padding
|-
| <center>0x0E</center> || short || soundCount || Count of sounds
|-
| <center>0x10</center> || [[ASN#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1c</center> || short || length || Count of sounds
|-
| <center>0x2E</center> || short || categoryID || Category Index
|-
| <center>Not Inline</center> || waves[length] || waves || Waves
|-
|}
After all of the categories are parsed, you can start parsing waves.
==Waves==
Note: You must sort the categories by their ID before reading the names. The names are packed back-to-back.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || char[0x1c] || name || Name
|-
| <center>0x1C</center> || short || accessMode || Access mode indicator
|-
| <center>0x1E</center> || short || id || WaveID
|-
|}
42890ce798a815b12b2c48e108577c4a86f92532
File:BMS OpenTrack.png
6
16
66
2022-03-12T22:27:50Z
Xayr
1
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
BST
0
17
72
2022-03-13T05:05:15Z
Xayr
1
Created page with "<b>Binary Sound Table</b> __TOC__ {| class="wikitable" |- ! Offset !! Type !! Name !! Description |- | <center>0x00</center> || byte || version=6 || Version |- | <center>0x01</center> || byte[0x3] || 0 || Zero padding |- | <center>0x04</center> || short || entryCount || Version |- | <center>0x06</center> || [[BST#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length |- |} ==Category== {| class="wikitable" |- ! Offs..."
wikitext
text/x-wiki
<b>Binary Sound Table</b>
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || version=6 || Version
|-
| <center>0x01</center> || byte[0x3] || 0 || Zero padding
|-
| <center>0x04</center> || short || entryCount || Version
|-
| <center>0x06</center> || [[BST#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || short || length || Count of sounds
|-
| <center>+0x02</center> || short || startID || ID of first sound
|-
| <center>Not Inline</center> || waves[length] || waves || Waves
|-
|}
After all of the categories are parsed, you can start parsing waves.
==Waves==
Note: You must sort the categories by their startID before reading the names. The waves are packed back-to-back.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || unknown || unknown
|-
| <center>0x01</center> || byte || unknown || unknown
|-
| <center>0x02</center> || byte || unknown || unknown
|-
| <center>0x03</center> || byte || unknown || unknown
|-
| <center>0x04</center> || byte || type || SoundType
|-
| <center>0x05</center> || byte || loadMode || Loading Method
|-
| <center>0x06</center> || short || unknown || unknown
|-
| <center>0x08</center> || float || pitch || Pitch
|-
| <center>0x0C</center> || short || Volume || Volume
|-
| <center>0x0E</center> || short || unknown || Probably padding
|}
8162063aaad3675080773a7c4d049f72ed9f0b18
73
72
2022-03-13T05:05:29Z
Xayr
1
wikitext
text/x-wiki
<b>Binary Sound Table</b>
__TOC__
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || version=6 || Version
|-
| <center>0x01</center> || byte[0x3] || 0 || Zero padding
|-
| <center>0x04</center> || short || entryCount || Version
|-
| <center>0x06</center> || [[BST#Category|Category]][0x12] || Categories || Category array with hardcoded arbitrary length
|-
|}
==Category==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || short || length || Count of sounds
|-
| <center>+0x02</center> || short || startID || ID of first sound
|-
| <center>Not Inline</center> || waves[length] || waves || Waves
|-
|}
After all of the categories are parsed, you can start parsing waves.
==Waves==
Note: You must sort the categories by their startID before reading the waves. The waves are packed back-to-back.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || byte || unknown || unknown
|-
| <center>0x01</center> || byte || unknown || unknown
|-
| <center>0x02</center> || byte || unknown || unknown
|-
| <center>0x03</center> || byte || unknown || unknown
|-
| <center>0x04</center> || byte || type || SoundType
|-
| <center>0x05</center> || byte || loadMode || Loading Method
|-
| <center>0x06</center> || short || unknown || unknown
|-
| <center>0x08</center> || float || pitch || Pitch
|-
| <center>0x0C</center> || short || Volume || Volume
|-
| <center>0x0E</center> || short || unknown || Probably padding
|}
905d108ad0fc23f60609a9a06d705e5a5c26d384
BAS (J3D)
0
18
74
2022-03-13T05:07:00Z
Xayr
1
Created page with "Don't have this fully documented Take what you will from this https://github.com/XAYRGA/bastool/blob/master/bastool/BinaryAudioSequence.cs"
wikitext
text/x-wiki
Don't have this fully documented
Take what you will from this
https://github.com/XAYRGA/bastool/blob/master/bastool/BinaryAudioSequence.cs
046db4d0880bfcff9ac9e7e855af55fc7c1bd699
HED
0
19
75
2022-03-13T05:33:56Z
Xayr
1
Created page with "HED (Header) is the file format for a BARC archive. {| class="wikitable" |- ! Offset !! Type !! Name !! Description |- | <center>0x00</center> || int64 || 0x2D2D2D2D42415243 'BARC----' || Magic |- | <center>0x08</center> || int32 || count || entryCount |- | <center>0x0C</center> || byte[0x4] || padding || padding (aligns to 32) |- | <center>0x10</center> || char[0x16] || path || Path to data cluster |- | <center>0x20</center> || BARC#BARCEntry | BARCEn..."
wikitext
text/x-wiki
HED (Header) is the file format for a BARC archive.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int64 || 0x2D2D2D2D42415243 'BARC----' || Magic
|-
| <center>0x08</center> || int32 || count || entryCount
|-
| <center>0x0C</center> || byte[0x4] || padding || padding (aligns to 32)
|-
| <center>0x10</center> || char[0x16] || path || Path to data cluster
|-
| <center>0x20</center> || [[BARC#BARCEntry | BARCEntry]][count]||| Entries
|-
|}
0c694df983f5696c45466da27f31adffb91c27d1
76
75
2022-03-13T05:34:05Z
Xayr
1
wikitext
text/x-wiki
HED (Header) is the file format for a BARC archive.
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int64 || 0x2D2D2D2D42415243 'BARC----' || Magic
|-
| <center>0x08</center> || int32 || count || entryCount
|-
| <center>0x0C</center> || byte[0x4] || padding || padding (aligns to 32)
|-
| <center>0x10</center> || char[0x16] || path || Path to data cluster
|-
| <center>0x20</center> || [[HED#BARCEntry | BARCEntry]][count]||| Entries
|-
|}
488db1fc84db16514de2edeba8ed212e5f6132e4
77
76
2022-03-13T05:40:02Z
Xayr
1
wikitext
text/x-wiki
HED (Header) is the file format for a BARC archive.
=HED=
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>0x00</center> || int64 || 0x2D2D2D2D42415243 'BARC----' || Magic
|-
| <center>0x08</center> || int32 || count || entryCount
|-
| <center>0x0C</center> || byte[0x4] || padding || padding (aligns to 32)
|-
| <center>0x10</center> || char[0x16] || path || Path to data cluster
|-
| <center>0x20</center> || [[HED#BARCEntry | BARCEntry]][count]||| Entries
|-
|}
==BARCEntry==
{| class="wikitable"
|-
! Offset !! Type !! Name !! Description
|-
| <center>+0x00</center> || char[0xE] || name || File Name
|-
| <center>+0x0E</center> || short || unknown(0xFFFF) || Unknown
|-
| <center>+0x10</center> || int32 || unknown || unknown
|-
| <center>+0x14</center> || int32 || unknown || unknown
|-
| <center>+0x18</center> || int32 || offset || offset into "path" (data cluster) file
|-
| <center>+0x1C</center> || int32 || size || File length
|-
|}
548fe09afd3503183086ef60d72b4ad8ce6391a7
JAudiov1
0
7
78
46
2022-03-13T05:41:42Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
__TOC__
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
* [[AAF]]
* [[AW]]
* [[AFC]]
* [[ASN]]
* [[BAS (J3D)]]
* [[BARC]]
* [[BMS]]
* [[BST]]
* [[HED]]
* [[IBNK]]
* [[SFT]]
* [[WSYS]]
<h1>Topics</h1>
* [[SoundEffect BMS]]
9f86728bd1f30847c30a0b4794695d29ab8c665a
79
78
2022-03-13T05:42:34Z
Xayr
1
wikitext
text/x-wiki
[[Category:JAudio]]
JAudio V1 was the first major revision of the audio engine for the gamecube.
It's roots are in the game Pikmin, where a questionable implementation of it was used for sound effects and music.
__TOC__
JAudioV1 in its complete form can be found in the following games and softwares, in chronological order
* Pikmin 1
* Gamecube IPL / Bios
* Luigi's Mansion
* Super Mario Sunshine
* The Legend of Zelda: Windwaker
* Pikmin 2
<h1>Formats</h1>
* [[AAF]]
* [[AW]]
* [[AFC]]
* [[ASN]]
* [[BAS (J3D)]]
* [[BARC]]
* [[BMS]]
* [[BST]]
* [[HED]]
* [[IBNK]]
* [[SFT]]
* [[WSYS]]
<h1>Topics</h1>
* [[SoundEffect BMS]]
* [[WSYS Scene Management]]
* [[SoundTable Quirks]]
ce9dcecdc71b246f936470337c6a59e8d66fd66a